Участник
Пользователь
- Сообщения
- 125
- Реакции
- 38
- Предупреждения
- 5
Нужна помощь в исправлении следующих ошибок:
ERRORS:
#1
// war3ft/cstrike.cpp(183) : error 088: number of arguments does not match definition
#2
// war3ft/loot.cpp(339) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(346) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(352) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(358) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(364) : error 088: number of arguments does not match definition
#3
// war3ft/multi_xp.cpp(41) : error 088: number of arguments does not match definition
#4
// war3ft/race_priest.h(45) : error 075: input line too long (after substitutions)
#5
// war3ft/showwin.cpp(83) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(86) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(91) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(94) : error 088: number of arguments does not match definition
#6
// war3ft/system_talisman.cpp(226) : error 088: number of arguments does not match definition
#7
// war3ft/util.cpp(157) : error 088: number of arguments does not match definition
#8
// war3ft/vip_system/vip_system.cpp(660) : error 088: number of arguments does not match definition
Заранее благодарен!
ERRORS:
#1
// war3ft/cstrike.cpp(183) : error 088: number of arguments does not match definition
#2
// war3ft/loot.cpp(339) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(346) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(352) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(358) : error 088: number of arguments does not match definition
// war3ft/loot.cpp(364) : error 088: number of arguments does not match definition
#3
// war3ft/multi_xp.cpp(41) : error 088: number of arguments does not match definition
#4
// war3ft/race_priest.h(45) : error 075: input line too long (after substitutions)
#5
// war3ft/showwin.cpp(83) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(86) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(91) : error 088: number of arguments does not match definition
// war3ft/showwin.cpp(94) : error 088: number of arguments does not match definition
#6
// war3ft/system_talisman.cpp(226) : error 088: number of arguments does not match definition
#7
// war3ft/util.cpp(157) : error 088: number of arguments does not match definition
#8
// war3ft/vip_system/vip_system.cpp(660) : error 088: number of arguments does not match definition
Код:
/*
* Counter-Strike and Condition Zero only functions
*/
public on_EndRound()
{
if ( !WC3_Check() )
return;
g_EndRound = true;
new players[32], numplayers, i;
get_players( players, numplayers );
for ( i = 0; i < numplayers; i++ )
{
new idUser = players[i];
UTIL_AutoHideMenu(idUser);
}//for
// Save XP at the end of the round?
if ( get_pcvar_num( CVAR_wc3_save_end_round ) )
{
// Threaded saves on end round!
DB_SaveAll( true );
}
return;
}
// Called when freezetime is over
public on_FreezeTimeComplete()
{
if ( !WC3_Check() )
return;
g_freezeTime = false;
return;
}
public on_TerroristWin()
{
if ( !WC3_Check() )
{
return;
}
XP_WinRound( TEAM_T );
//Отображение победителя в конце раунда
fShowWinnPlayer(TEAM_T);
return;
}
public on_CTWin()
{
if ( !WC3_Check() )
{
return;
}
XP_WinRound( TEAM_CT );
//Отображение победителя в конце раунда
fShowWinnPlayer(TEAM_CT);
return;
}
public _CS_MinModelsLoop()
{
if ( !WC3_Check() )
{
return;
}
if ( get_pcvar_num( CVAR_wc3_query_client ) )
{
new iPlayers[32], iNumPlayers, i;
get_players( iPlayers, iNumPlayers, "c" );
for ( i = 0; i < iNumPlayers; i++ )
{
query_client_cvar( iPlayers[i], "cl_minmodels", "_CS_CheckMinModelsValue" );
}
}
}
public _CS_CheckMinModelsValue( idUser, const cvar[], const value[] )
{
if ( equali( cvar,"cl_minmodels" ) && strcmp( value, "0" ) )
{
client_cmd( idUser, "echo ^"======== CSSB Warcraft 3 Frozen Throne Private ========^"" );
format(szMessage, charsmax(szMessage), "echo ^"%L^"",LANG_PLAYER,"CLIENT_KICK_CL_MODELS_1");
client_cmd( idUser, szMessage);
format(szMessage, charsmax(szMessage), "echo ^"%L^"",LANG_PLAYER,"CLIENT_KICK_CL_MODELS_2");
client_cmd( idUser, szMessage);
client_cmd( idUser, "echo ^"=========================================^"" );
format(szMessage, charsmax(szMessage), "kick #%d ^"%L^"",get_user_userid( idUser ),LANG_PLAYER,"CLIENT_KICK_CL_MODELS_3");
server_cmd( szMessage );
}
}
// Function called when a user's armor changes
public on_Battery( idUser )
{
if ( !WC3_Check() )
{
return;
}
if ( !bIgnoreArmorSet[idUser] )
{
// Store the previous value (we do this b/c the Battery event is triggered (and set to 0) before weapon reincarnation)
arrIntData[idUser][P_LASTARMOR] = arrIntData[idUser][P_ARMORONDEATH];
arrIntData[idUser][P_ARMORONDEATH] = read_data( 1 );
}
return;
}
public on_ArmorType(idUser)
{
if (!WC3_Check())
return;
new iCurrentArmor = clAr:getUserArmor(idUser,g_ArmorType[idUser]);
arrIntData[idUser][P_ARMORONDEATH] = iCurrentArmor;
return;
}
// Event triggered when you look at another player
public on_ShowStatus(idUser)
{
if (!WC3_Check())
return;
//Очищает когда слева внизу отображает здоровье на кого навел (мусор короче :) )
Create_StatusText(idUser,0,"");
UTIL_ClearHudChannel(idUser, HUD_SHOWSTATUS);
new idTarget = read_data( 2 );
if(is_user_alive(idUser) && is_user_connected(idUser) &&
is_user_alive(idTarget) && is_user_connected(idTarget))
{
//Отображение текущего здоровья и брони
new iCurrentHealth = clHP:getUserHealth(idUser);
new iCurrentArmor = clAr:getArmorNum(idUser);
if(iCurrentHealth > 255 || iCurrentArmor > 255)
{
new szMsgHealthArmor[256];
formatex(szMsgHealthArmor, charsmax(szMsgHealthArmor),
"%L: %d | %L: %d",LANG_PLAYER,"CURRENT_HEALTH",iCurrentHealth,
LANG_PLAYER,"WORD_ARMOR",iCurrentArmor);
Create_StatusText(idUser, 0, szMsgHealthArmor);
}
new iTargetTeam = get_user_team( idTarget );
new iViewerTeam = get_user_team( idUser );
// Same team check
if ( iViewerTeam == iTargetTeam )
{
// Check if your teammate looks like the enemy!
if ( arrBoolData[idTarget][PB_SKINSWITCHED] )
{
new szMessageDontShot[256];
format(szMessageDontShot, charsmax(szMessageDontShot),
"%L",LANG_PLAYER, "HES_ON_YOUR_TEAM_DONT_SHOOT");
set_dhudmessage(79, 79, 79 ,-1.0,0.30,0, 0.01, 1.0, 0.01, 0.01, -1);
show_dhudmessage(idUser, szMessageDontShot);
client_cmd( idUser, "speak %s", arrStrSounds[SOUND_ANTEND] );
}
}
// Отображение информации на экране при наведении прицелом
if ( get_pcvar_num( CVAR_wc3_show_player ) )
{
new szTargetName[32];
get_user_name(idTarget, szTargetName,charsmax(szTargetName));
if(!SM_IsValidRace( arrIntData[idTarget][P_RACE] ))
return;
new szShortRaceNameTarget[32];
Lang_GetRaceName(arrIntData[idTarget][P_RACE], idUser, szShortRaceNameTarget,charsmax(szShortRaceNameTarget),true);
new szMessageStatus[256];
new iColorRGB_TEAM_T[3];
iColorRGB_TEAM_T[0] = 255;
iColorRGB_TEAM_T[1] = 69;
iColorRGB_TEAM_T[2] = 0;
new iColorRGB_TEAM_CT[3];
iColorRGB_TEAM_CT[0] = 58;
iColorRGB_TEAM_CT[1] = 95;
iColorRGB_TEAM_CT[2] = 205;
if(iViewerTeam == TEAM_T)//Если наводящий курсор из команды террористов
{
if(iTargetTeam == TEAM_T)
{
format(szMessageStatus, charsmax(szMessageStatus),
"%s ^n%L %d %L %d ^n%L %s ^n%L %d",
szTargetName,
LANG_PLAYER, "WC3_HEALTH",
clHP:getUserHealth(idTarget),
LANG_PLAYER, "WC3_ARMOR",
clAr:getArmorNum(idTarget),
LANG_PLAYER, "WC3_RACE",
szShortRaceNameTarget,
LANG_PLAYER, "WORD_LEVEL",
arrIntData[idTarget][P_LEVEL]);
set_hudmessage(iColorRGB_TEAM_T[0],iColorRGB_TEAM_T[1],iColorRGB_TEAM_T[2], -1.0, 0.60, 0, 0.01, 3.0, 0.01, 0.01, HUD_SHOWSTATUS );
show_hudmessage(idUser,szMessageStatus);
}
if(iTargetTeam == TEAM_CT)
{
format(szMessageStatus, charsmax(szMessageStatus),
"%s ^n%L %s ^n%L %d",
szTargetName,
LANG_PLAYER, "WC3_RACE",
szShortRaceNameTarget,
LANG_PLAYER, "WORD_LEVEL",
arrIntData[idTarget][P_LEVEL]);
set_hudmessage(iColorRGB_TEAM_CT[0],iColorRGB_TEAM_CT[1],iColorRGB_TEAM_CT[2], -1.0, 0.60, 0, 0.01, 3.0, 0.01, 0.01, HUD_SHOWSTATUS );
show_hudmessage(idUser,szMessageStatus);
}
}
if(iViewerTeam == TEAM_CT)//Если наводящий курсор из команды коунтер-террористов
{
if(iTargetTeam == TEAM_T)
{
format(szMessageStatus, charsmax(szMessageStatus),
"%s ^n%L %s ^n%L %d",
szTargetName,
LANG_PLAYER, "WC3_RACE",
szShortRaceNameTarget,
LANG_PLAYER, "WORD_LEVEL",
arrIntData[idTarget][P_LEVEL]);
set_hudmessage(iColorRGB_TEAM_T[0],iColorRGB_TEAM_T[1],iColorRGB_TEAM_T[2], -1.0, 0.60, 0, 0.01, 3.0, 0.01, 0.01, HUD_SHOWSTATUS );
show_hudmessage(idUser,szMessageStatus);
}
if(iTargetTeam == TEAM_CT)
{
format(szMessageStatus, charsmax(szMessageStatus),
"%s ^n%L %d %L %d ^n%L %s ^n%L %d",
szTargetName,
LANG_PLAYER, "WC3_HEALTH",
clHP:getUserHealth(idTarget),
LANG_PLAYER, "WC3_ARMOR",
clAr:getArmorNum(idTarget),
LANG_PLAYER, "WC3_RACE",
szShortRaceNameTarget,
LANG_PLAYER, "WORD_LEVEL",
arrIntData[idTarget][P_LEVEL]);
set_hudmessage(iColorRGB_TEAM_CT[0],iColorRGB_TEAM_CT[1],iColorRGB_TEAM_CT[2], -1.0, 0.60, 0, 0.01, 3.0, 0.01, 0.01, HUD_SHOWSTATUS );
show_hudmessage(idUser,szMessageStatus);
}
}
}//if ( get_pcvar_num( CVAR_wc3_show_player ) )
}//if(is_user_alive(idUser) && is_user_connected(idUser)
return;
}
// This is called when the user is no longer viewing the player
public on_HideStatus(idUser)
{
if ( !WC3_Check() )
{
return;
}
if ( get_pcvar_num( CVAR_wc3_show_player ) && !g_freezeTime )
{
UTIL_ClearHudChannel( idUser, HUD_SHOWSTATUS );
UTIL_ClearDHudChannel( idUser );
}
ClearSyncHud(idUser, msgSyncObj);
}
// Function is called when buytime is over
public _CS_BuyTimeOver()
{
g_buyTime = false;
}
public on_WeapPickup( idUser )
{
if ( !WC3_Check() )
{
return;
}
SHARED_SaveWeapons( idUser );
return;
}
public on_GameRestart()
{
if ( !WC3_Check() )
return;
// Save all XP on game restart - do not do this threaded or it might take 300 years
DB_SaveAll(false);
g_GameRestarting = true;
sm4_4_2_evRoundRestart();
iRoundCount = 0;
return;
}
// From war3x
public on_Zoom(idUser)
{
if ( !WC3_Check() )
{
return;
}
if ( read_data( 1 ) < 90 )
{
g_bPlayerZoomed[idUser] = true;
}
else
{
g_bPlayerZoomed[idUser] = false;
}
// We will need to change the user's speed on zooming
SHARED_SetSpeed( idUser );
return;
}
public on_BombPlanting( idUser )
{
arrBoolData[idUser][PB_ISPLANTING] = true;
}
public on_BombStopPlanting( idUser )
{
arrBoolData[idUser][PB_ISPLANTING] = false;
Код:
public fLootPrecache()
{
engfunc(EngFunc_PrecacheModel, szModelItems);
engfunc(EngFunc_PrecacheModel, szModelArXpHpItems);
idSpriteItems = engfunc(EngFunc_PrecacheModel,szSpriteItems);
idSpriteNoItems = engfunc(EngFunc_PrecacheModel,szSpriteNoItems);
}
public fScreenFadePlayer(idUser)
{
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, idUser) ;
write_short(1<<12);
write_short(1<<12);
write_short(1<<12);
write_byte(0);
write_byte(200);
write_byte(0);
write_byte(20);
message_end();
}
FloatToNum(Float:floatn)
{
new str[64], num;
float_to_str(floatn, str, 63);
num = str_to_num(str);
return num
}
//Удаление всех брошеных предметов
//(в данном случае запускается при старте нового раунда
//файл events.inl - функция public EVENT_NewRound() )
fRemoveAllItems()
{
if(get_pcvar_num( CVAR_wc3_loot_items ) > 0)
{
new nextitem = find_ent_by_class(-1, szClassNameItems);
while(nextitem)
{
remove_entity(nextitem);
nextitem = find_ent_by_class(-1, szClassNameItems);
}
ArrayClear(arrIntTotalLootEntity);
ArrayClear(arrIntOriginsLootX);
ArrayClear(arrIntOriginsLootY);
ArrayClear(arrIntOriginsLootZ);
ArrayClear(arrIntItemVictimShop1);
ArrayClear(arrIntItemVictimShop2);
ArrayClear(arrIntItemVictimShop3);
ArrayClear(arrIntDrawSpriteItems);
ArrayClear(arrIntScaleSpriteItems);
if (get_pcvar_num( CVAR_wc3_loot_remove ) == 1)
ArrayClear(arrIntLootRemove);
}
}
fCreateArXpHpClass(idUser)
{
// get origin
new Float:origin[3];
pev(idUser, pev_origin, origin);
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if (!ent) return -1;
// Set data
set_pev(ent, pev_classname, szClassNameItems);
set_pev(ent, pev_solid, SOLID_TRIGGER);
set_pev(ent, pev_movetype, MOVETYPE_TOSS);//#define MOVETYPE_TOSS 6 gravity/collisions
set_pev(ent, pev_sequence, 0);
set_pev(ent, pev_frame, 0.0);
set_pev(ent, pev_owner, idUser);
// Set size
// new Float:mins[3] = { -20.0, -20.0, 0.0 };
// new Float:maxs[3] = { 20.0, 20.0, 30.0 };
// engfunc(EngFunc_SetSize, ent, mins, maxs);
// Set model
engfunc(EngFunc_SetModel, ent, szModelArXpHpItems);
// Set position
set_pev(ent, pev_origin, origin);
// Установка невидимости и подсветки выпавшего предмета
// fm_set_rendering(ent,kRenderFxGlowShell,arrColorNoItemsRGB[0],arrColorNoItemsRGB[1],arrColorNoItemsRGB[2],kRenderTransAlpha, 128);
fm_set_rendering(ent,kRenderFxGlowShell,arrColorNoItemsRGB[0],arrColorNoItemsRGB[1],arrColorNoItemsRGB[2],kRenderNormal, 128);
ArrayPushCell(arrIntTotalLootEntity, ent);
ArrayPushCell(arrIntOriginsLootX, FloatToNum(origin[0]));
ArrayPushCell(arrIntOriginsLootY, FloatToNum(origin[1]));
ArrayPushCell(arrIntOriginsLootZ, FloatToNum(origin[2] + 10));
/*
if(get_pcvar_num( CVAR_wc3_loot_remove ) == 1)
{
new arrParams[2];
arrParams[0] = ent;
arrParams[1] = (TASK_LOOTREMOVE + ent);
set_task(get_pcvar_float( CVAR_wc3_loot_stay ), "fRemoveLootItem", TASK_LOOTREMOVE + ent,arrParams, sizeof(arrParams));
}
*/
return -1;
}
fCreateItemsClass(idUser)
{
// get origin
new Float:origin[3];
pev(idUser, pev_origin, origin);
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if (!ent) return -1;
// Set data
set_pev(ent, pev_classname, szClassNameItems);
set_pev(ent, pev_solid, SOLID_TRIGGER);
set_pev(ent, pev_movetype, MOVETYPE_TOSS);//#define MOVETYPE_TOSS 6 gravity/collisions
set_pev(ent, pev_sequence, 0);
set_pev(ent, pev_frame, 0.0);
set_pev(ent, pev_owner, idUser);
// Set size
// new Float:mins[3] = { -20.0, -20.0, 0.0 };
// new Float:maxs[3] = { 20.0, 20.0, 30.0 };
// engfunc(EngFunc_SetSize, ent, mins, maxs);
// Set model
engfunc(EngFunc_SetModel, ent, szModelItems);
// Set position
set_pev(ent, pev_origin, origin);
// Установка невидимости и подсветки выпавшего предмета
// fm_set_rendering(ent,kRenderFxGlowShell,arrColorItemsRGB[0],arrColorItemsRGB[1],arrColorItemsRGB[2],kRenderTransAlpha, 128);
fm_set_rendering(ent,kRenderFxGlowShell,arrColorItemsRGB[0],arrColorItemsRGB[1],arrColorItemsRGB[2],kRenderNormal, 128);
ArrayPushCell(arrIntTotalLootEntity, ent);
ArrayPushCell(arrIntOriginsLootX, FloatToNum(origin[0]));
ArrayPushCell(arrIntOriginsLootY, FloatToNum(origin[1]));
ArrayPushCell(arrIntOriginsLootZ, FloatToNum(origin[2] + 10));
/*
if(get_pcvar_num( CVAR_wc3_loot_remove ) == 1)
{
new arrParams[2];
arrParams[0] = ent;
arrParams[1] = (TASK_LOOTREMOVE + ent);
set_task(get_pcvar_float( CVAR_wc3_loot_stay ), "fRemoveLootItem", TASK_LOOTREMOVE + ent,arrParams, sizeof(arrParams));
}
*/
return -1;
}
public bIsItemUserSlot(idUser,iSlot)
{
new iVictimItemShop = ITEM_NONE;
if(ITEM_Has( idUser, ITEM_ANKH ) == iSlot && ITEM_HasItem( idUser, ITEM_ANKH ) == ITEM_ANKH )
iVictimItemShop = ITEM_ANKH;
if(ITEM_Has( idUser, ITEM_BOOTS ) == iSlot && ITEM_HasItem( idUser, ITEM_BOOTS ) == ITEM_BOOTS )
iVictimItemShop = ITEM_BOOTS;
if(ITEM_Has( idUser, ITEM_CLAWS ) == iSlot && ITEM_HasItem( idUser, ITEM_CLAWS ) == ITEM_CLAWS )
iVictimItemShop = ITEM_CLAWS;
if(ITEM_Has( idUser, ITEM_CLOAK ) == iSlot && ITEM_HasItem( idUser, ITEM_CLOAK ) == ITEM_CLOAK )
iVictimItemShop = ITEM_CLOAK;
if(ITEM_Has( idUser, ITEM_MASK ) == iSlot && ITEM_HasItem( idUser, ITEM_MASK ) == ITEM_MASK )
iVictimItemShop = ITEM_MASK;
if(ITEM_Has( idUser, ITEM_NECKLACE ) == iSlot && ITEM_HasItem( idUser, ITEM_NECKLACE ) == ITEM_NECKLACE )
iVictimItemShop = ITEM_NECKLACE;
if(ITEM_Has( idUser, ITEM_FROST ) == iSlot && ITEM_HasItem( idUser, ITEM_FROST ) == ITEM_FROST )
iVictimItemShop = ITEM_FROST;
if(ITEM_Has( idUser, ITEM_HEALTH ) == iSlot && ITEM_HasItem( idUser, ITEM_HEALTH ) == ITEM_HEALTH )
iVictimItemShop = ITEM_HEALTH;
// if(ITEM_Has( idUser, ITEM_TOME ) == iSlot && ITEM_HasItem( idUser, ITEM_TOME ) == ITEM_TOME ) //Не входит в слот
// client_print(idUser,print_chat,"ITEM_TOME YES");
if(ITEM_Has( idUser, ITEM_SCROLL ) == iSlot && ITEM_HasItem( idUser, ITEM_SCROLL ) == ITEM_SCROLL )
iVictimItemShop = ITEM_SCROLL;
if(ITEM_Has( idUser, ITEM_PROTECTANT ) == iSlot && ITEM_HasItem( idUser, ITEM_PROTECTANT ) == ITEM_PROTECTANT )
iVictimItemShop = ITEM_PROTECTANT;
if(ITEM_Has( idUser, ITEM_HELM ) == iSlot && ITEM_HasItem( idUser, ITEM_HELM ) == ITEM_HELM )
iVictimItemShop = ITEM_HELM;
if(ITEM_Has( idUser, ITEM_AMULET ) == iSlot && ITEM_HasItem( idUser, ITEM_AMULET ) == ITEM_AMULET )
iVictimItemShop = ITEM_AMULET;
if(ITEM_Has( idUser, ITEM_SOCK ) == iSlot && ITEM_HasItem( idUser, ITEM_SOCK ) == ITEM_SOCK )
iVictimItemShop = ITEM_SOCK;
if(ITEM_Has( idUser, ITEM_GLOVES ) == iSlot && ITEM_HasItem( idUser, ITEM_GLOVES ) == ITEM_GLOVES )
iVictimItemShop = ITEM_GLOVES;
if(ITEM_Has( idUser, ITEM_RING ) == iSlot && ITEM_HasItem( idUser, ITEM_RING ) == ITEM_RING )
iVictimItemShop = ITEM_RING;
if(ITEM_Has( idUser, ITEM_CHAMELEON ) == iSlot && ITEM_HasItem( idUser, ITEM_CHAMELEON ) == ITEM_CHAMELEON )
iVictimItemShop = ITEM_CHAMELEON;
if(ITEM_Has( idUser, ITEM_MOLE ) == iSlot && ITEM_HasItem( idUser, ITEM_MOLE ) == ITEM_MOLE )
iVictimItemShop = ITEM_MOLE;
//Для shopmenu3
if(ITEM_Has( idUser, ITEM_INTELLECT ) == iSlot && ITEM_HasItem( idUser, ITEM_INTELLECT ) == ITEM_INTELLECT )
iVictimItemShop = ITEM_INTELLECT;
if(ITEM_Has( idUser, ITEM_GRENADE_PROTECTION ) == iSlot && ITEM_HasItem( idUser, ITEM_GRENADE_PROTECTION ) == ITEM_GRENADE_PROTECTION )
iVictimItemShop = ITEM_GRENADE_PROTECTION;
if(ITEM_Has( idUser, ITEM_MIRROR_SHIELD ) == iSlot && ITEM_HasItem( idUser, ITEM_MIRROR_SHIELD ) == ITEM_MIRROR_SHIELD )
iVictimItemShop = ITEM_MIRROR_SHIELD;
if(ITEM_Has( idUser, ITEM_ESP ) == iSlot && ITEM_HasItem( idUser, ITEM_ESP ) == ITEM_ESP )
iVictimItemShop = ITEM_ESP;
if(ITEM_Has( idUser, ITEM_FROST_ARMOR ) == iSlot && ITEM_HasItem( idUser, ITEM_FROST_ARMOR ) == ITEM_FROST_ARMOR )
iVictimItemShop = ITEM_FROST_ARMOR;
if(ITEM_Has( idUser, ITEM_DEATH_TOUCH ) == iSlot && ITEM_HasItem( idUser, ITEM_DEATH_TOUCH ) == ITEM_DEATH_TOUCH )
iVictimItemShop = ITEM_DEATH_TOUCH;
if(ITEM_Has( idUser, ITEM_ULTIMATE_TIMER_DIVIDER ) == iSlot && ITEM_HasItem( idUser, ITEM_ULTIMATE_TIMER_DIVIDER ) == ITEM_ULTIMATE_TIMER_DIVIDER )
iVictimItemShop = ITEM_ULTIMATE_TIMER_DIVIDER;
if(ITEM_Has( idUser, ITEM_DEVOURER_LIGHT ) == iSlot && ITEM_HasItem( idUser, ITEM_DEVOURER_LIGHT ) == ITEM_DEVOURER_LIGHT )
iVictimItemShop = ITEM_DEVOURER_LIGHT;
if(ITEM_Has( idUser, ITEM_ICE_BLOCK ) == iSlot && ITEM_HasItem( idUser, ITEM_ICE_BLOCK ) == ITEM_ICE_BLOCK )
iVictimItemShop = ITEM_ICE_BLOCK;
if(ITEM_Has( idUser, ITEM_THIEF ) == iSlot && ITEM_HasItem( idUser, ITEM_THIEF ) == ITEM_THIEF )
iVictimItemShop = ITEM_THIEF;
if(ITEM_Has( idUser, ITEM_MIRROR_ULTIMATE ) == iSlot && ITEM_HasItem( idUser, ITEM_MIRROR_ULTIMATE ) == ITEM_MIRROR_ULTIMATE )
iVictimItemShop = ITEM_MIRROR_ULTIMATE;
if(ITEM_Has( idUser, ITEM_DEATHCOIL ) == iSlot && ITEM_HasItem( idUser, ITEM_DEATHCOIL ) == ITEM_DEATHCOIL )
iVictimItemShop = ITEM_DEATHCOIL;
if(ITEM_Has( idUser, ITEM_IMPALE ) == iSlot && ITEM_HasItem( idUser, ITEM_IMPALE ) == ITEM_IMPALE )
iVictimItemShop = ITEM_IMPALE;
if(ITEM_Has( idUser, ITEM_SLEEP ) == iSlot && ITEM_HasItem( idUser, ITEM_SLEEP ) == ITEM_SLEEP )
iVictimItemShop = ITEM_SLEEP;
if(ITEM_Has( idUser, ITEM_BOOK_DEAD ) == iSlot && ITEM_HasItem( idUser, ITEM_BOOK_DEAD ) == ITEM_BOOK_DEAD )
iVictimItemShop = ITEM_BOOK_DEAD;
if(ITEM_Has( idUser, ITEM_TRANQUILITY ) == iSlot && ITEM_HasItem( idUser, ITEM_TRANQUILITY ) == ITEM_TRANQUILITY )
iVictimItemShop = ITEM_TRANQUILITY;
return iVictimItemShop;
}
//Цвет выпавших вещей
stock fColorItems(iItemVictimShop1,iItemVictimShop2,iItemVictimShop3)
{
new bIsDropItems = 3;
if(iItemVictimShop1 != ITEM_NONE)//Если были у жертвы вещи в слоте 1
{
arrColorItemsRGB[0] = 255;
arrColorItemsRGB[1] = 0;
arrColorItemsRGB[2] = 0;
return arrColorItemsRGB;
}
else
{
bIsDropItems -= 1;
}
if(iItemVictimShop2 != ITEM_NONE)//Если были у жертвы вещи в слоте 2
{
arrColorItemsRGB[0] = 255;
arrColorItemsRGB[1] = 0;
arrColorItemsRGB[2] = 0;
return arrColorItemsRGB;
}
else
{
bIsDropItems -= 1;
}
if(iItemVictimShop3 != ITEM_NONE)//Если были у жертвы вещи в слоте 3
{
arrColorItemsRGB[0] = 255;
arrColorItemsRGB[1] = 0;
arrColorItemsRGB[2] = 0;
return arrColorItemsRGB;
}
else
{
bIsDropItems -= 1;
}
//Если у жертвы совсем не оказалось предметов
if(bIsDropItems == 0)
{
arrColorItemsRGB[0] = 30;
arrColorItemsRGB[1] = 144;
arrColorItemsRGB[2] = 255;
return arrColorItemsRGB;
}
return arrColorItemsRGB;
}
//Есть ли выпавшие вещи у жертвы
stock fIsDropItems(iItemVictimShop1,iItemVictimShop2,iItemVictimShop3)
{
new bIsDropItems = 3;
if(iItemVictimShop1 == ITEM_NONE)//Если были у жертвы вещи в слоте 1
bIsDropItems -= 1;
if(iItemVictimShop2 == ITEM_NONE)//Если были у жертвы вещи в слоте 2
bIsDropItems -= 1;
if(iItemVictimShop3 == ITEM_NONE)//Если были у жертвы вещи в слоте 3
bIsDropItems -= 1;
//Если у жертвы совсем не оказалось предметов
if(bIsDropItems == 0)
return bIsDropItems;
return bIsDropItems;
}
//Отображение сообщения при поднятии предмета
stock fShowMsgPickUpItem(idUserTouch,szShowMessage[256],iRed,iGreen,iBlue)
{
set_hudmessage(iRed,iGreen,iBlue,0.85,0.5,0,0.0,5.0,0.02,0.02,-1);
ShowSyncHudMsg(idUserTouch, msgSyncObj,szShowMessage);
}
//Отображение сообщения при поднятии предмета
stock fShowMessagePickUpItem(idUserTouch,szShowMessage[256],iRed,iGreen,iBlue,iTypeLoot)
{
UTIL_ClearDHudChannel(idUserTouch);
UTIL_ClearHudChannel(idUserTouch,HUD_XP);
WC3_ShowBar(idUserTouch);
switch(iTypeLoot)
{
case enMoney:
{
set_dhudmessage(iRed,iGreen,iBlue, 0.85,0.5,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUserTouch, szShowMessage);
}
case enHealth:
{
set_dhudmessage(iRed,iGreen,iBlue, 0.85,0.55,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUserTouch, szShowMessage);
}
case enArmor:
{
set_dhudmessage(iRed,iGreen,iBlue, 0.85,0.6,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUserTouch, szShowMessage);
}
case enXP:
{
set_dhudmessage(iRed,iGreen,iBlue, 0.85,0.65,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUserTouch, szShowMessage);
}
case enOther:
{
set_dhudmessage(iRed,iGreen,iBlue, 0.85,0.45,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUserTouch, szShowMessage);
}
}
}
//Запуск счетчика отсчета на удаление предмета
public fRunCalcRemoveLootItem()
{
if (get_pcvar_num( CVAR_wc3_loot_remove ) == 0)
return;
if(ArraySize(arrIntTotalLootEntity) == 0)
return;
for (new i = 0; i < ArraySize(arrIntTotalLootEntity); i++)
{
new entLoot = ArrayGetCell(arrIntTotalLootEntity, i);
if (!is_valid_ent(entLoot))
continue;
new iTimerLoot = ArrayGetCell(arrIntLootRemove, i);
if(iTimerLoot == 0)
{
fRemoveLootItem(entLoot);
}
else
{
ArraySetCell(arrIntLootRemove,i, iTimerLoot - 1);
}
}
}
//Удаление предмета если он долго лежит на земле
public fRemoveLootItem(idEntLootItem)
{
if(!is_valid_ent(idEntLootItem))
return;
entity_set_int(idEntLootItem, EV_INT_movetype, MOVETYPE_FLY);
entity_set_int(idEntLootItem, EV_INT_rendermode, kRenderTransAlpha);
entity_set_int(idEntLootItem, EV_INT_renderfx, kRenderFxGlowShell);
entity_set_float(idEntLootItem, EV_FL_renderamt, 255.0);
entity_set_vector(idEntLootItem, EV_VEC_rendercolor, Float:{255.0, 255.0, 0.0});
entity_set_vector(idEntLootItem, EV_VEC_velocity, Float:{0.0, 0.0, 20.0});
new arrParams[2];
arrParams[0] = idEntLootItem;
arrParams[1] = 250;
fEffectRemoveLootItem(arrParams);
}
public fEffectRemoveLootItem(arr[2]) // arr = [idEntLootItem, Float:fStart
{
new idEntLootItem = arr[0];
new iStart = arr[1];
if(!is_valid_ent(idEntLootItem))
{
task_remove(TASK_LOOTITEM + idEntLootItem);
return;
}
static Float:fFadeAmount[4096];
if(iStart)
{
task_remove(TASK_LOOTITEM + idEntLootItem);
fFadeAmount[idEntLootItem] = float(iStart);
}
fFadeAmount[idEntLootItem] -= 25.0;
if(fFadeAmount[idEntLootItem] > 0.0)
{
entity_set_float(idEntLootItem, EV_FL_renderamt, fFadeAmount[idEntLootItem]);
new arrParams[2];
arrParams[0] = idEntLootItem;
arrParams[1] = 0;
task_set(0.1, "fEffectRemoveLootItem",TASK_LOOTITEM + idEntLootItem,arrParams, sizeof(arrParams));
}
else
{
new classname[32];
pev(idEntLootItem, pev_classname, classname, sizeof classname - 1);
if (equali(classname, "war3ft_loot_items"))
{
for (new i = 0; i < ArraySize(arrIntTotalLootEntity); i++)
{
if(idEntLootItem == ArrayGetCell(arrIntTotalLootEntity, i))
{
new entLoot = ArrayGetCell(arrIntTotalLootEntity, i);
if (is_valid_ent(entLoot))
engfunc(EngFunc_RemoveEntity, entLoot);
ArrayDeleteItem(arrIntTotalLootEntity,i);
ArrayDeleteItem(arrIntOriginsLootX,i);
ArrayDeleteItem(arrIntOriginsLootY,i);
ArrayDeleteItem(arrIntOriginsLootZ,i);
ArrayDeleteItem(arrIntItemVictimShop1,i);
ArrayDeleteItem(arrIntItemVictimShop2,i);
ArrayDeleteItem(arrIntItemVictimShop3,i);
ArrayDeleteItem(arrIntDrawSpriteItems,i);
ArrayDeleteItem(arrIntScaleSpriteItems,i);
ArrayDeleteItem(arrIntLootRemove,i);
//client_print(0,print_chat,"Item DELETE");
break;
}
}
}
}
}
//Отрисовка иконок
public client_PostThink(idUser)
{
if(!is_user_alive(idUser))
return;
if ((fIconDelayLootItems + fIconUpdateLootItems) > get_gametime())
return;
fIconDelayLootItems = get_gametime();
//Включение/отключение иконки отображающейся над выпавшим талисманом
if(get_pcvar_num( CVAR_wc3_icon_talisman ) > 0)
create_icon_origin(idUser, entTalisman, arrIdSprites[SPR_ICON_TALISMAN]);
if(get_pcvar_num( CVAR_wc3_loot_items ) > 0)
{
if (!is_user_alive(idUser) || ArraySize(arrIntTotalLootEntity) == 0)
return;
for (new i = 0; i < ArraySize(arrIntTotalLootEntity); i++)
{
new iSprite = ArrayGetCell(arrIntDrawSpriteItems, i);
new iScale = ArrayGetCell(arrIntScaleSpriteItems, i);
fDrawSprite(idUser,i,iSprite,iScale);
}
}
return;
}
stock create_icon_origin(id, ent, sprite)
{
if(!is_user_alive(id) || !is_user_connected(id))
return;
if (!pev_valid(ent))
return;
new Float:fMyOrigin[3]
entity_get_vector(id, EV_VEC_origin, fMyOrigin)
new target = ent
new Float:fTargetOrigin[3]
entity_get_vector(target, EV_VEC_origin, fTargetOrigin)
fTargetOrigin[2] += 70.0
if (!is_in_viewcone(id, fTargetOrigin))
return;
new Float:fMiddle[3], Float:fHitPoint[3]
xs_vec_sub(fTargetOrigin, fMyOrigin, fMiddle)
trace_line(-1, fMyOrigin, fTargetOrigin, fHitPoint)
new Float:fWallOffset[3], Float:fDistanceToWall
fDistanceToWall = vector_distance(fMyOrigin, fHitPoint) - 10.0
normalize(fMiddle, fWallOffset, fDistanceToWall)
new Float:fSpriteOffset[3]
xs_vec_add(fWallOffset, fMyOrigin, fSpriteOffset)
new Float:fScale//, Float:fDistanceToTarget = vector_distance(fMyOrigin, fTargetOrigin)
fScale = 0.01 * fDistanceToWall;
new scale = floatround(fScale)
scale = max(scale, 1)
scale = min(scale, 2)
scale = max(scale, 1)
te_sprite(id, fSpriteOffset, sprite, scale, 100);
}
stock te_sprite(id, Float:origin[3], sprite, scale, brightness)
{
message_begin(MSG_ONE, SVC_TEMPENTITY, _, id)
write_byte(TE_SPRITE)
write_coord(floatround(origin[0]))
write_coord(floatround(origin[1]))
write_coord(floatround(origin[2]))
write_short(sprite)
write_byte(scale)
write_byte(brightness)
message_end()
}
stock normalize(Float:fIn[3], Float:fOut[3], Float:fMul)
{
new Float:fLen = xs_vec_len(fIn)
xs_vec_copy(fIn, fOut)
fOut[0] /= fLen, fOut[1] /= fLen, fOut[2] /= fLen
fOut[0] *= fMul, fOut[1] *= fMul, fOut[2] *= fMul
}
//Функция отрисовки
fDrawSprite(idUser,iLoot,iSprite,iScale)
{
message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0, 0, 0}, idUser);
write_byte(TE_SPRITE); // additive sprite, plays 1 cycle
write_coord(ArrayGetCell(arrIntOriginsLootX, iLoot)); // xpos
write_coord(ArrayGetCell(arrIntOriginsLootY, iLoot)); // ypos
write_coord(ArrayGetCell(arrIntOriginsLootZ, iLoot)); // zpos
write_short(iSprite); // spr index
write_byte(iScale); // (scale in 0.1's)
write_byte(30); //brightness
message_end();
}
//Когда прикасаешься к предмету
public player_Touch(idEntityTouched, idUserTouch)
{
if(get_pcvar_num( CVAR_wc3_loot_items ) > 0)
{
if (!pev_valid(idEntityTouched) || !is_user_alive(idUserTouch))
return FMRES_IGNORED
new szClassname[32];
pev(idEntityTouched, pev_classname, szClassname, sizeof szClassname - 1)
new iSumMoney = 0;
if (equali(szClassname, "war3ft_loot_items"))
{
for (new i = 0; i < ArraySize(arrIntTotalLootEntity); i++)
{
if(idEntityTouched == ArrayGetCell(arrIntTotalLootEntity, i))
{
new entLoot = ArrayGetCell(arrIntTotalLootEntity, i);
if (is_valid_ent(entLoot))
engfunc(EngFunc_RemoveEntity, entLoot);
fScreenFadePlayer(idUserTouch);
new iItemVictimShop1 = ArrayGetCell(arrIntItemVictimShop1, i);
new iItemVictimShop2 = ArrayGetCell(arrIntItemVictimShop2, i);
new iItemVictimShop3 = ArrayGetCell(arrIntItemVictimShop3, i);
new bIsDropItems = 3;
new szShowMessageLoot[256];
if(iItemVictimShop1 != ITEM_NONE)//Если были у жертвы вещи в слоте 1
{
if(ITEM_GetSlot( idUserTouch ) != ITEM_SLOT_FULL &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_ONE) != iItemVictimShop1 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_TWO) != iItemVictimShop1 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_THREE) != iItemVictimShop1)
{
ITEM_GiveItem( idUserTouch, iItemVictimShop1);
}
else
{
//Вознаграждение если у подобравшего все слоты заняты.Дается денежка за вещь
new iItemMoneyDrop1 = ITEM_Cost( idUserTouch, iItemVictimShop1 );
iSumMoney += iItemMoneyDrop1;
}
}
else
{
bIsDropItems -= 1;
}
if(iItemVictimShop2 != ITEM_NONE)//Если были у жертвы вещи в слоте 2
{
if(ITEM_GetSlot( idUserTouch ) != ITEM_SLOT_FULL &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_ONE) != iItemVictimShop2 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_TWO) != iItemVictimShop2 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_THREE) != iItemVictimShop2)
{
ITEM_GiveItem( idUserTouch, iItemVictimShop2 );
}
else
{
//Вознаграждение если у подобравшего все слоты заняты.Дается денежка за вещь
new iItemMoneyDrop2 = ITEM_Cost( idUserTouch, iItemVictimShop2 );
iSumMoney += iItemMoneyDrop2;
}
}
else
{
bIsDropItems -= 1;
}
if(iItemVictimShop3 != ITEM_NONE)//Если были у жертвы вещи в слоте 3
{
if(ITEM_GetSlot( idUserTouch ) != ITEM_SLOT_FULL &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_ONE) != iItemVictimShop3 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_TWO) != iItemVictimShop3 &&
bIsItemUserSlot(idUserTouch,ITEM_SLOT_THREE) != iItemVictimShop3)
{
ITEM_GiveItem( idUserTouch, iItemVictimShop3 );
}
else
{
//Вознаграждение если у подобравшего все слоты заняты.Дается денежка за вещь
new iItemMoneyDrop3 = ITEM_Cost( idUserTouch, iItemVictimShop3 );
iSumMoney += iItemMoneyDrop3;
}
}
else
{
bIsDropItems -= 1;
}
//Начисление денег за все предметы
if(iSumMoney > 0)
{
SHARED_SetUserMoney( idUserTouch,SHARED_GetUserMoney( idUserTouch ) + iSumMoney, 1 );
format(szShowMessageLoot, charsmax(szShowMessageLoot), "+$: %d",iSumMoney);
//fShowMsgPickUpItem(idUserTouch,szShowMessageLoot,188,143,143);
fShowMessagePickUpItem(idUserTouch,szShowMessageLoot,188,143,143,enMoney);
}
//Если у жертвы совсем не оказалось предметов
if(bIsDropItems == 0)
{
//client_print(idUserTouch,print_chat,"XP: %d",XP_GivenByLevel( iLevel ));
//client_print(idUserTouch,print_chat,"XP 2: %d",XP_GetByLevel( iLevel ));
switch(random_num(0, 2))
{
case 0:
{
new iMaxHealth = clHP:getRaceMaxHealth(idUserTouch);
new iCurrentHealth = clHP:getUserHealth(idUserTouch);
new iBonusHp = get_pcvar_num(CVAR_wc3_loot_items_health);
if((iCurrentHealth + iBonusHp) > iMaxHealth)
clHP:setUserHealth(idUserTouch,iMaxHealth);
else
clHP:setUserHealth(idUserTouch,iCurrentHealth + iBonusHp);
format(szShowMessageLoot, charsmax(szShowMessageLoot), "+HP: %d",iBonusHp);
fShowMessagePickUpItem(idUserTouch,szShowMessageLoot,205,92,92,enHealth);
}
case 1:
{
new iMaxArmor = clAr:getRaceMaxArmor(idUserTouch);
new CsArmorType:tArmor;
new iCurrentArmor = clAr:getUserArmor(idUserTouch,tArmor);
new iBonusArmor = get_pcvar_num(CVAR_wc3_loot_items_armor);
if((iCurrentArmor + iBonusArmor) > iMaxArmor)
clAr:setUserArmor(idUserTouch,iMaxArmor);
else
clAr:setUserArmor(idUserTouch,iCurrentArmor + iBonusArmor);
format(szShowMessageLoot, charsmax(szShowMessageLoot), "+AR: %d",iBonusArmor);
fShowMessagePickUpItem(idUserTouch,szShowMessageLoot,0,255,127,enArmor);
}
case 2:
{
new iLevel = arrIntData[idUserTouch][P_LEVEL];
new iBonusXP = XP_GivenByLevel( iLevel );
XP_Give( idUserTouch, iBonusXP );
format(szShowMessageLoot, charsmax(szShowMessageLoot), "+XP: %d",iBonusXP);
fShowMessagePickUpItem(idUserTouch,szShowMessageLoot,188,143,143,enXP);
}
}
}
ArrayDeleteItem(arrIntTotalLootEntity,i);
ArrayDeleteItem(arrIntOriginsLootX,i);
ArrayDeleteItem(arrIntOriginsLootY,i);
ArrayDeleteItem(arrIntOriginsLootZ,i);
ArrayDeleteItem(arrIntItemVictimShop1,i);
ArrayDeleteItem(arrIntItemVictimShop2,i);
ArrayDeleteItem(arrIntItemVictimShop3,i);
ArrayDeleteItem(arrIntDrawSpriteItems,i);
ArrayDeleteItem(arrIntScaleSpriteItems,i);
if (get_pcvar_num( CVAR_wc3_loot_remove ) == 1)
ArrayDeleteItem(arrIntLootRemove,i);
break;
}
}
}//if (equali(classname, "war3ft_loot_items"))
}//if(get_pcvar_num( CVAR_wc3_loot_items ) > 0)
//Для talisman +
touchPlayerTalisman(idEntityTouched, idUserTouch);
return FMRES_IGNORED
}
Код:
//јктиваци¤ двойного опыта
public fActiveDoubleXP()//добавлена в events.inl (public EVENT_NewRound())
{
if (iMultiXPOnOff <= 0)
return;
//ќбнуление двойного активации опыта
bDoubleXPActive = false;
new szCurrentTime[31];
get_time("%H",szCurrentTime,charsmax(szCurrentTime));
new iHour = str_to_num(szCurrentTime);
for(new i = 0; i < MAX_HOUR; i++)
{
new iMultiXPHour = ArrayGetCell(arrIntMultiXPHourData,i);
if(iHour == LIST_TIME[i] && iMultiXPHour == ON)
{
bDoubleXPActive = true;
break;
}
}
}
public mxp_ClientPutinserver(idUser)//добавлена в cssbWar3ftMod.sma ( public client_putinserver( idUser ) )
{
if ( idUser >= TASK_MULTIXP )
idUser -= TASK_MULTIXP;
fActiveDoubleXP();
if(bDoubleXPActive == true)
{
new szShowMsgMultiXP[255];
format(szShowMsgMultiXP, charsmax(szShowMsgMultiXP), "%L",LANG_PLAYER,"WC3_MULTI_XP_ACTIVE",iBonusFactorXP);
set_dhudmessage(119,136,153,-1.0,-1.0,2,0.0,2.0,0.02,0.02, -1);
show_dhudmessage(idUser, szShowMsgMultiXP);
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szShowMsgMultiXP);
}
}
Код:
/*
* Race: Priest (∆рец) Functions
*/
//»нициализаци¤ скилов Race: Priest (∆рец)
public clRacePriest::setPriestSkillsInit()//добавлена в skill_manager.cpp ( SM_Init() )
{
// Set up the Skill Owners
g_SkillOwner[SKILL_PRIEST_ENTRYINTOCHASM ] = RACE_PRIEST;
g_SkillOwner[SKILL_PRIEST_SACRED_FIRE ] = RACE_PRIEST;
g_SkillOwner[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = RACE_PRIEST;
g_SkillOwner[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = RACE_PRIEST;
g_SkillOwner[PASS_PRIEST_MYSTICISM ] = RACE_PRIEST;
// Set up the skill types
g_SkillType[SKILL_PRIEST_ENTRYINTOCHASM ] = SKILL_TYPE_TRAINABLE;
g_SkillType[SKILL_PRIEST_SACRED_FIRE ] = SKILL_TYPE_TRAINABLE;
g_SkillType[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = SKILL_TYPE_TRAINABLE;
g_SkillType[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = SKILL_TYPE_ULTIMATE;
g_SkillType[PASS_PRIEST_MYSTICISM ] = SKILL_TYPE_PASSIVE;
// Set up the skill order
g_SkillOrder[SKILL_PRIEST_ENTRYINTOCHASM ] = SKILL_POS_1;
g_SkillOrder[SKILL_PRIEST_SACRED_FIRE ] = SKILL_POS_2;
g_SkillOrder[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = SKILL_POS_3;
g_SkillOrder[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = SKILL_POS_4;
g_SkillOrder[PASS_PRIEST_MYSTICISM ] = SKILL_POS_NONE;
}
// *******************************************************
// —кил 1 уровн¤ - Entry into a chasm - ¬хождение в бездну - защитный
// *******************************************************
public clRacePriest::skillEntryInChasm(idVictim,idAttacker)
{
if (!is_user_alive( idAttacker ) && !arrBoolData[idAttacker][PB_ISCONNECTED])
return;
new iSkillLevel = SM_GetSkillLevel(idAttacker, SKILL_PRIEST_ENTRYINTOCHASM);
if(iSkillLevel > 0)
{
if(isDisabledSkillsOnMap(idAttacker,SKILL_PRIEST_ENTRYINTOCHASM) == true)
return;
new Float:fEntryintochasm = ArrayGetCell(arrEntryintochasm,iSkillLevel-1);
if (!arrBoolData[idAttacker][PB_HEXED] &&
random_float(fPriestSkill1MinPercent,fPriestSkill1MaxPercent) <= fEntryintochasm &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false)
{
if(get_user_team(idVictim) != get_user_team(idAttacker) )
{
new iAttackerCurHealth = clHP:getUserHealth(idAttacker);
new iVictimCurHealth = clHP:getUserHealth(idVictim);
if(iVictimCurHealth > iAttackerCurHealth)
{
clHP:setUserHealth(idAttacker,iVictimCurHealth);
clHP:setUserHealth(idVictim,iAttackerCurHealth);
}
}
}
}
}
// *******************************************************
// —кил 2 уровн¤ - Sacred fire - —в¤щенный огонь - наступательный
// *******************************************************
public fwHamWeapPriAttack(idWeapon)
{
if (!pev_valid(idWeapon))
return HAM_IGNORED;
static idOwner;
idOwner = pev(idWeapon, pev_owner)
if (!is_user_alive( idOwner ) && !arrBoolData[idOwner][PB_ISCONNECTED])
return HAM_IGNORED;
if (fm_get_weaponid(idWeapon) == CSW_KNIFE)
return HAM_IGNORED;
if (fm_get_weapon_ammo(idWeapon) > 0 && arrFireWeapon[idOwner] > 0 && arrIsWorkFireWeapon[idOwner] == true)
{
arrFireWeapon[idOwner] -= 1;
arrIsWorkFireWeapon[idOwner] = false;
}
return HAM_IGNORED;
}
public fwHamTraceAttackPriest(idVictim, idAttacker, Float:fDamage, Float:fDirection[3], tracehandle, damage_type)
{
//client_print(idAttacker,print_chat,"FA: %d",arrFireWeapon[idAttacker]);
if (!is_user_alive( idAttacker ))
return HAM_HANDLED;
if (!is_user_alive( idVictim ))
return HAM_HANDLED;
if (!is_user_alive( idAttacker ) && !arrBoolData[idAttacker][PB_ISCONNECTED])
return HAM_HANDLED;
if (!is_user_alive( idVictim ) && !arrBoolData[idVictim][PB_ISCONNECTED])
return HAM_HANDLED;
if ((get_user_weapon(idAttacker) == CSW_KNIFE))
return HAM_IGNORED;
if ( (idVictim == idAttacker) || !is_user_connected(idAttacker) ||
(get_user_team(idVictim) == get_user_team(idAttacker))
)
return HAM_HANDLED;
if(arrIsEffectBubble[idAttacker] == true)
clRacePriest::stBubbles(idAttacker);
new iSkillLevel = SM_GetSkillLevel(idVictim, SKILL_PRIEST_SPIRITUAL_ACCURACY);
if (iSkillLevel > 0 && isDisabledSkillsOnMap(idVictim,SKILL_PRIEST_SPIRITUAL_ACCURACY) == false)
{
new Float:fSpiritual = ArrayGetCell(arrSpiritualAccuracy,iSkillLevel-1);
if (is_user_alive( idVictim ) && arrBoolData[idVictim][PB_ISCONNECTED]&&
random_float(fPriestSkill3MinPercent,fPriestSkill3MaxPercent) <= fSpiritual &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false &&
arrIsEffectBubble[idAttacker] == false)
{
clRacePriest::skillSpAccuracy(idVictim,idAttacker);
}
}
if (!arrFireWeapon[idAttacker])
return HAM_HANDLED;
if (!(damage_type & DMG_BULLET))
return HAM_HANDLED;
iSkillLevel = SM_GetSkillLevel(idAttacker, SKILL_PRIEST_SACRED_FIRE);
if (iSkillLevel > 0 && isDisabledSkillsOnMap(idAttacker,SKILL_PRIEST_SACRED_FIRE) == false)
{
new Float:fSacredfire = ArrayGetCell(arrSacredFire,iSkillLevel-1);
if (is_user_alive( idAttacker ) && arrBoolData[idAttacker][PB_ISCONNECTED]&&
random_float(fPriestSkill2MinPercent,fPriestSkill2MaxPercent) <= fSacredfire &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false)
{
fStartFire(idVictim, idAttacker);
arrIsWorkFireWeapon[idAttacker] = true;
}
}
return HAM_IGNORED;
}
fStartFire(idVictim, idAttacker)
{
static params[3];
params[0] = floatround(fFireDuration * 5.0); // duration
params[1] = idAttacker; // attacker
params[2] = idVictim + clRacePriest::tID_SACRED_FIRE;
if (task_exists(idVictim + clRacePriest::tID_SACRED_FIRE ))
return;
set_task(0.2, "fBurningFlame",params[2], params, sizeof params);
}
public fBurningFlame(args[3])
{
//client_print(0,print_chat,"fBurningFlame");
new idUser = args[2];
if (args[2] >= clRacePriest::tID_SACRED_FIRE )
idUser -= clRacePriest::tID_SACRED_FIRE;
if (!is_user_alive(idUser))
return;
static Float:originF[3]
pev(idUser, pev_origin, originF)
if ((pev(idUser, pev_flags) & FL_INWATER) || FLAME_DURATION < 1)
{
// Smoke sprite
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SMOKE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]); // x
engfunc(EngFunc_WriteCoord, originF[1]); // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0); // z
write_short(arrIdSprites[SPR_SMOKE_PRIEST]); // sprite
write_byte(random_num(15, 20)); // scale
write_byte(random_num(10, 20)); // framerate
message_end()
return;
}
if ((pev(idUser, pev_flags) & FL_ONGROUND) && fFireSlowdown > 0.0)
{
static Float:velocity[3];
pev(idUser, pev_velocity, velocity);
xs_vec_mul_scalar(velocity, fFireSlowdown, velocity);
set_pev(idUser, pev_velocity, velocity);
}
new health = clHP:getUserHealth(idUser);
if (health > fFireDamage)
clHP:setUserHealth(idUser,health - floatround(fFireDamage));
else
ExecuteHamB(Ham_Killed, idUser, FLAME_ATTACKER, 0);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SPRITE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]+random_float(-5.0, 5.0)); // x
engfunc(EngFunc_WriteCoord, originF[1]+random_float(-5.0, 5.0)); // y
engfunc(EngFunc_WriteCoord, originF[2]+random_float(-10.0, 10.0)); // z
write_short(arrIdSprites[SPR_FIRE_PRIEST]); // sprite
write_byte(random_num(5, 10)); // scale
write_byte(200); // brightness
message_end();
// Decrease burning duration counter
FLAME_DURATION -= 1;
new Float:firl_time
if (0.2 > fFireDuration)
firl_time = fFireDuration - 0.1;
else
firl_time = 0.2;
set_task(firl_time, "fBurningFlame", args[2], args, sizeof args);
}
// *******************************************************
// —кил 3 уровн¤ - ƒуховна¤ меткость - Spiritual accuracy - защитный
// *******************************************************
public clRacePriest::skillSpAccuracy(idVictim,idAttacker)
{
if(!arrBoolData[idAttacker][PB_ISCONNECTED])
return 0;
clRacePriest::stBubbles(idAttacker);
if (task_exists(idAttacker + clRacePriest::tID_SP_ACCURACY ) == 0 )
{
set_user_hitzones(idAttacker, 0, 0); //ƒелаем холостые выстрелы
arrIsEffectBubble[idAttacker] = true;
set_task(0.7, "_setTaskResetSPA", clRacePriest::tID_SP_ACCURACY + idAttacker );
}
return 0;
}
public clRacePriest::setTaskResetSPA(idAttacker)
{
if (idAttacker >= clRacePriest::tID_SP_ACCURACY )
idAttacker -= clRacePriest::tID_SP_ACCURACY;
if(!arrBoolData[idAttacker][PB_ISCONNECTED])
return;
set_user_hitzones(idAttacker, 0, 255); // ¬осстанавливаем нормальный режим стрельбы
arrIsEffectBubble[idAttacker] = false;
}
stock clRacePriest::stBubbles(idAttacker)
{
new ptPlayerOrigin[3], ptBulletOrigin[3];
get_user_origin(idAttacker, ptPlayerOrigin, 1);
get_user_origin(idAttacker, ptBulletOrigin, 4);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, ptBulletOrigin);
write_byte(114);
write_coord(ptPlayerOrigin[0]);
write_coord(ptPlayerOrigin[1]);
write_coord(ptPlayerOrigin[2]);
write_coord(ptBulletOrigin[0]);
write_coord(ptBulletOrigin[1]);
write_coord(ptBulletOrigin[2]);
write_coord(40);
write_short(arrIdSprites[SPR_BUBBLE_PRIEST]);
write_byte(10);
write_coord(40);
message_end();
}
// *******************************************************
// —упер навык - —лово “ьмы - —мерть - Darkness word: Death
// *******************************************************
public clRacePriest::ultDarkWordDeath(idVictim)
{
if ( !ULT_Available( idVictim ) )
return;
if ( arrBoolData[idVictim][PB_CHANGINGTEAM] )
return;
//Ѕлокировка супер навыка если у игрока ќжерелье {
new Float:ptVictim[3]
pev(idVictim, pev_origin, ptVictim);
new arrPlayers[32], iNumPlayers;
get_players(arrPlayers, iNumPlayers, "a" );
new iTargetID;
new iTeam = get_user_team( idVictim );
for(new i = 0; i < iNumPlayers; i++)
{
iTargetID = arrPlayers[i];
if(iTargetID == idVictim)
continue;
if(is_user_alive(iTargetID))
{
new Float:ptOriginTarget[3], Float:fDistance;
pev(iTargetID, pev_origin, ptOriginTarget);
fDistance = get_distance_f(ptVictim, ptOriginTarget);
//client_print(idVictim,print_chat,"fDistance: %.1f",fDistance);
if(fDistance <= fBlockUltRadius && iTeam != get_user_team(iTargetID))
{
if (ULT_CanUserBlockUlt(iTargetID,idVictim))
{
ULT_RemoveCharge(iTargetID);
ULT_Blocked(idVictim);
fResetUltimateTimerDivider(idVictim);
return;
}
}
}
}
//Ѕлокировка супер навыка если у игрока ќжерелье }
set_pev(idVictim, pev_sequence, 12);
set_pev(idVictim, pev_animtime, halflife_time());
set_pev(idVictim, pev_framerate, 1.0);
set_pev(idVictim, pev_movetype, MOVETYPE_NONE);
new Float:ptOrigin[3];
pev(idVictim, pev_origin, ptOrigin);
clRacePriest::stGetPos(idVictim, 150.0, 0.0, 0.0, ptOrigin);
emit_sound(idVictim,CHAN_STATIC, arrStrSounds[SOUND_FIREBALL_PRIEST], 0.5, ATTN_NORM,SND_CHANGE_VOL, PITCH_NORM);
new taskParm[4]
taskParm[0] = idVictim;
taskParm[1] = floatround(ptOrigin[0]);
taskParm[2] = floatround(ptOrigin[1]);
taskParm[3] = floatround(ptOrigin[2]);
set_task(0.5, "_fSetFireAttack", idVictim + clRacePriest::tID_FIRE_ATTACK, taskParm, 4 );
set_task(3.0, "_fStopUlt", idVictim + clRacePriest::tID_REMOVE_ATTACK);
fResetUltimateTimerDivider(idVictim);
}
public clRacePriest::fSetFireAttack(taskParm[4])
{
new idVictim = taskParm[0];
new Float:ptSkyOrigin[3];
ptSkyOrigin[0] = float(taskParm[1]);
ptSkyOrigin[1] = float(taskParm[2]);
ptSkyOrigin[2] = float(taskParm[3]);
new Float:ptExplosion[24][3], Float:ptBall[24][3]
ptExplosion[0][0] = 200.0;
ptExplosion[0][1] = 0.0;
ptExplosion[0][2] = ptSkyOrigin[2];
ptExplosion[1][0] = 400.0;
ptExplosion[1][1] = 0.0;
ptExplosion[1][2] = ptSkyOrigin[2];
ptExplosion[2][0] = -200.0;
ptExplosion[2][1] = 0.0;
ptExplosion[2][2] = ptSkyOrigin[2];
ptExplosion[3][0] = -400.0;
ptExplosion[3][1] = 0.0;
ptExplosion[3][2] = ptSkyOrigin[2];
ptExplosion[4][0] = 0.0;
ptExplosion[4][1] = 200.0;
ptExplosion[4][2] = ptSkyOrigin[2];
ptExplosion[5][0] = 0.0;
ptExplosion[5][1] = 400.0;
ptExplosion[5][2] = ptSkyOrigin[2];
ptExplosion[6][0] = 0.0;
ptExplosion[6][1] = -200.0;
ptExplosion[6][2] = ptSkyOrigin[2];
ptExplosion[7][0] = 0.0;
ptExplosion[7][1] = -400.0;
ptExplosion[7][2] = ptSkyOrigin[2];
ptExplosion[8][0] = 200.0;
ptExplosion[8][1] = 200.0;
ptExplosion[8][2] = ptSkyOrigin[2];
ptExplosion[9][0] = 400.0;
ptExplosion[9][1] = 400.0;
ptExplosion[9][2] = ptSkyOrigin[2];
ptExplosion[10][0] = 200.0;
ptExplosion[10][1] = 400.0;
ptExplosion[10][2] = ptSkyOrigin[2];
ptExplosion[11][0] = 400.0;
ptExplosion[11][1] = 200.0;
ptExplosion[11][2] = ptSkyOrigin[2];
ptExplosion[12][0] = -200.0;
ptExplosion[12][1] = 200.0;
ptExplosion[12][2] = ptSkyOrigin[2];
ptExplosion[13][0] = -400.0;
ptExplosion[13][1] = 400.0;
ptExplosion[13][2] = ptSkyOrigin[2];
ptExplosion[14][0] = -200.0
ptExplosion[14][1] = 400.0
ptExplosion[14][2] = ptSkyOrigin[2];
ptExplosion[15][0] = -400.0;
ptExplosion[15][1] = 200.0;
ptExplosion[15][2] = ptSkyOrigin[2];
ptExplosion[16][0] = -200.0;
ptExplosion[16][1] = -200.0;
ptExplosion[17][2] = ptSkyOrigin[2];
ptExplosion[17][0] = -200.0;
ptExplosion[17][1] = -200.0;
ptExplosion[17][2] = ptSkyOrigin[2];
ptExplosion[18][0] = -200.0;
ptExplosion[18][1] = -400.0;
ptExplosion[18][2] = ptSkyOrigin[2];
ptExplosion[19][0] = -400.0;
ptExplosion[19][1] = -200.0;
ptExplosion[19][2] = ptSkyOrigin[2];
ptExplosion[20][0] = 200.0;
ptExplosion[20][1] = -200.0;
ptExplosion[20][2] = ptSkyOrigin[2];
ptExplosion[21][0] = 400.0;
ptExplosion[21][1] = -400.0;
ptExplosion[21][2] = ptSkyOrigin[2];
ptExplosion[22][0] = 200.0;
ptExplosion[22][1] = -400.0;
ptExplosion[22][2] = ptSkyOrigin[2];
ptExplosion[23][0] = 400.0;
ptExplosion[23][1] = -200.0;
ptExplosion[23][2] = ptSkyOrigin[2];
for(new i = 0; i < sizeof(ptExplosion); i++)
{
ptBall[i][0] = float(taskParm[1]);
ptBall[i][1] = float(taskParm[2]);
ptBall[i][2] = float(taskParm[3]);
clRacePriest::stGetPos(idVictim, ptExplosion[i][0], ptExplosion[i][1], ptExplosion[i][2], ptBall[i])
clRacePriest::fCreateFireball(idVictim, ptBall[i])
}
set_task(1.0, "_fSetFireAttack", idVictim + clRacePriest::tID_FIRE_ATTACK, taskParm, 4 );
}
stock clRacePriest::stGetPos(idUser, Float:fForward, Float:fRight, Float:fUp, Float:fVecStart[])
{
new Float:fVecAngle[3], Float:fVecForward[3], Float:fVecRight[3], Float:fViewOfs[3];
pev(idUser, pev_view_ofs,fViewOfs);
xs_vec_add(fVecStart,fViewOfs,fVecStart)
pev(idUser, pev_v_angle, fVecAngle);
fVecAngle[0] = 0.0;
angle_vector(fVecAngle,ANGLEVECTOR_FORWARD,fVecForward);
angle_vector(fVecAngle,ANGLEVECTOR_RIGHT,fVecRight);
angle_vector(fVecAngle,ANGLEVECTOR_UP,fViewOfs);
fVecStart[0] = fVecStart[0] + fVecForward[0] * fForward + fVecRight[0] * fRight + fViewOfs[0] * fUp;
fVecStart[1] = fVecStart[1] + fVecForward[1] * fForward + fVecRight[1] * fRight + fViewOfs[1] * fUp;
fVecStart[2] = fVecStart[2] + fVecForward[2];
}
public clRacePriest::fCreateFireball(idUser, Float:ptOrigin[3])
{
new entBall = create_entity("info_target");
static Float:fAngles[3];
pev(idUser, pev_angles, fAngles);
entity_set_origin(entBall, ptOrigin);
fAngles[0] = -100.0;
entity_set_vector(entBall, EV_VEC_angles, fAngles);
fAngles[0] = 100.0;
entity_set_vector(entBall, EV_VEC_v_angle, fAngles);
entity_set_string(entBall, EV_SZ_classname, "entBallFire");
entity_set_model(entBall, arrStrModels[MDL_FIREBALL]);
entity_set_int(entBall, EV_INT_solid, 2);
entity_set_int(entBall, EV_INT_movetype, MOVETYPE_FLY);
new Float:fMaxsSize[3] = {15.0, 15.0, 15.0};
new Float:fMinSize[3] = {-15.0, -15.0, -15.0};
entity_set_size(entBall, fMinSize, fMaxsSize);
set_pev(entBall, pev_owner, idUser);
static Float:fVelocity[3];
VelocityByAim(entBall, random_num(250, 1000), fVelocity);
set_pev(entBall, pev_light_level, 180);
set_pev(entBall, pev_rendermode, kRenderTransAdd);
set_pev(entBall, pev_renderamt, 255.0);
entity_set_vector(entBall, EV_VEC_velocity, fVelocity);
clRacePriest::fBurning(entBall, 0.5);
}
public clRacePriest::fStopUlt(idUser)//ќстановка работающей ульты ∆реца
{
if (idUser >= clRacePriest::tID_REMOVE_ATTACK)
idUser -= clRacePriest::tID_REMOVE_ATTACK;
remove_task(idUser + clRacePriest::tID_FIRE_ATTACK);
}
public clRacePriest::fBurning(entBall, Float:fSize)
{
static entEnvSprite;
entEnvSprite = create_entity("env_sprite");
set_pev(entEnvSprite, pev_takedamage, 0.0);
set_pev(entEnvSprite, pev_solid, SOLID_NOT);
set_pev(entEnvSprite, pev_movetype, MOVETYPE_NONE);
set_pev(entEnvSprite, pev_classname, "_entBallFire");
engfunc(EngFunc_SetModel, entEnvSprite, arrStrSprites[SPR_FLAME_PRIEST]);
set_pev(entEnvSprite, pev_rendermode, kRenderTransAdd);
set_pev(entEnvSprite, pev_renderamt, 255.0);
set_pev(entEnvSprite, pev_light_level, 180);
set_pev(entEnvSprite, pev_scale, fSize);
set_pev(entEnvSprite, pev_owner, entBall);
set_pev(entEnvSprite, pev_animtime, get_gametime());
set_pev(entEnvSprite, pev_framerate, 8.0);
set_pev(entEnvSprite, pev_frame, 0.1);
set_pev(entEnvSprite, pev_spawnflags, SF_SPRITE_STARTON);
dllfunc(DLLFunc_Spawn, entEnvSprite);
thinkBallFire(entEnvSprite);
set_pev(entEnvSprite, pev_nextthink, get_gametime() + 0.01);
return entEnvSprite;
}
public thinkBallFire(entBallFire)
{
if(!pev_valid(entBallFire))
return;
if(!pev_valid(pev(entBallFire, pev_owner)))
{
remove_entity(entBallFire);
return;
}
static idOwner;
idOwner = pev(entBallFire, pev_owner);
static Float:ptOrigin[3];
pev(idOwner, pev_origin, ptOrigin);
ptOrigin[2] += 25.0;
entity_set_origin(entBallFire, ptOrigin);
set_pev(entBallFire, pev_nextthink, get_gametime() + 0.01);
}
public touchBallFire(entBallFire, idUserTouch)
{
if(!pev_valid(entBallFire))
return;
static Float:ptOrigin[3]
pev(entBallFire, pev_origin, ptOrigin);
new idOwner = pev(entBallFire, pev_owner);
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
engfunc(EngFunc_WriteCoord, ptOrigin[0]);
engfunc(EngFunc_WriteCoord, ptOrigin[1]);
engfunc(EngFunc_WriteCoord, ptOrigin[2]);
write_short(arrIdSprites[SPR_ZEXPLODE_PRIEST]);
write_byte(10);
write_byte(30);
write_byte(4);
message_end();
emit_sound(entBallFire,CHAN_STATIC, arrStrSounds[SOUND_FIREBALL_EXP_PRIEST], 0.07, ATTN_NORM,SND_CHANGE_VOL, PITCH_NORM);
new arrPlayers[32], iNumPlayers;
get_players(arrPlayers, iNumPlayers, "a" );
new iTargetID;
new iTeam = get_user_team( idOwner );
for(new i = 0; i < iNumPlayers; i++)
{
iTargetID = arrPlayers[i];
if(is_user_alive(iTargetID))
{
new Float:ptOriginTarget[3], Float:fDistance;
pev(iTargetID, pev_origin, ptOriginTarget);
fDistance = get_distance_f(ptOrigin, ptOriginTarget);
if(fDistance <= fBallExpRadius && iTeam != get_user_team(iTargetID))
{
clRacePriest::stShakeScreenPriest(iTargetID);
WC3_Damage(iTargetID,idOwner,iWordDeathDmg,CSW_WORDDEATH, -1 );
clRacePriest::stScreenFadePriest(iTargetID, 3, {255, 0, 0}, 120);
}
}
}
remove_entity(entBallFire);
}
stock clRacePriest::stScreenFadePriest(idUser, Timer, Colors[3], Alpha)
{
message_begin(MSG_ONE_UNRELIABLE,gmsgScreenFade,_, idUser);
write_short((1<<12) * Timer);
write_short(1<<12);
write_short(0);
write_byte(Colors[0]);
write_byte(Colors[1]);
write_byte(Colors[2]);
write_byte(Alpha);
message_end();
}
stock clRacePriest::stShakeScreenPriest(idUser)
{
message_begin(MSG_ONE_UNRELIABLE,gmsgScreenShake,{0,0,0}, idUser);
write_short(1<<14);
write_short(1<<13);
write_short(1<<13);
message_end();
}
Код:
/*
* Race: Priest (∆рец) Functions
*/
//»нициализаци¤ скилов Race: Priest (∆рец)
public clRacePriest::setPriestSkillsInit()//добавлена в skill_manager.cpp ( SM_Init() )
{
// Set up the Skill Owners
g_SkillOwner[SKILL_PRIEST_ENTRYINTOCHASM ] = RACE_PRIEST;
g_SkillOwner[SKILL_PRIEST_SACRED_FIRE ] = RACE_PRIEST;
g_SkillOwner[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = RACE_PRIEST;
g_SkillOwner[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = RACE_PRIEST;
g_SkillOwner[PASS_PRIEST_MYSTICISM ] = RACE_PRIEST;
// Set up the skill types
g_SkillType[SKILL_PRIEST_ENTRYINTOCHASM ] = SKILL_TYPE_TRAINABLE;
g_SkillType[SKILL_PRIEST_SACRED_FIRE ] = SKILL_TYPE_TRAINABLE;
g_SkillType[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = SKILL_TYPE_TRAINABLE;
g_SkillType[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = SKILL_TYPE_ULTIMATE;
g_SkillType[PASS_PRIEST_MYSTICISM ] = SKILL_TYPE_PASSIVE;
// Set up the skill order
g_SkillOrder[SKILL_PRIEST_ENTRYINTOCHASM ] = SKILL_POS_1;
g_SkillOrder[SKILL_PRIEST_SACRED_FIRE ] = SKILL_POS_2;
g_SkillOrder[SKILL_PRIEST_SPIRITUAL_ACCURACY ] = SKILL_POS_3;
g_SkillOrder[ULTIMATE_PRIEST_DARKNESS_WORD_DEATH ] = SKILL_POS_4;
g_SkillOrder[PASS_PRIEST_MYSTICISM ] = SKILL_POS_NONE;
}
// *******************************************************
// —кил 1 уровн¤ - Entry into a chasm - ¬хождение в бездну - защитный
// *******************************************************
public clRacePriest::skillEntryInChasm(idVictim,idAttacker)
{
if (!is_user_alive( idAttacker ) && !arrBoolData[idAttacker][PB_ISCONNECTED])
return;
new iSkillLevel = SM_GetSkillLevel(idAttacker, SKILL_PRIEST_ENTRYINTOCHASM);
if(iSkillLevel > 0)
{
if(isDisabledSkillsOnMap(idAttacker,SKILL_PRIEST_ENTRYINTOCHASM) == true)
return;
new Float:fEntryintochasm = ArrayGetCell(arrEntryintochasm,iSkillLevel-1);
if (!arrBoolData[idAttacker][PB_HEXED] &&
random_float(fPriestSkill1MinPercent,fPriestSkill1MaxPercent) <= fEntryintochasm &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false)
{
if(get_user_team(idVictim) != get_user_team(idAttacker) )
{
new iAttackerCurHealth = clHP:getUserHealth(idAttacker);
new iVictimCurHealth = clHP:getUserHealth(idVictim);
if(iVictimCurHealth > iAttackerCurHealth)
{
clHP:setUserHealth(idAttacker,iVictimCurHealth);
clHP:setUserHealth(idVictim,iAttackerCurHealth);
}
}
}
}
}
// *******************************************************
// —кил 2 уровн¤ - Sacred fire - —в¤щенный огонь - наступательный
// *******************************************************
public fwHamWeapPriAttack(idWeapon)
{
if (!pev_valid(idWeapon))
return HAM_IGNORED;
static idOwner;
idOwner = pev(idWeapon, pev_owner)
if (!is_user_alive( idOwner ) && !arrBoolData[idOwner][PB_ISCONNECTED])
return HAM_IGNORED;
if (fm_get_weaponid(idWeapon) == CSW_KNIFE)
return HAM_IGNORED;
if (fm_get_weapon_ammo(idWeapon) > 0 && arrFireWeapon[idOwner] > 0 && arrIsWorkFireWeapon[idOwner] == true)
{
arrFireWeapon[idOwner] -= 1;
arrIsWorkFireWeapon[idOwner] = false;
}
return HAM_IGNORED;
}
public fwHamTraceAttackPriest(idVictim, idAttacker, Float:fDamage, Float:fDirection[3], tracehandle, damage_type)
{
//client_print(idAttacker,print_chat,"FA: %d",arrFireWeapon[idAttacker]);
if (!is_user_alive( idAttacker ))
return HAM_HANDLED;
if (!is_user_alive( idVictim ))
return HAM_HANDLED;
if (!is_user_alive( idAttacker ) && !arrBoolData[idAttacker][PB_ISCONNECTED])
return HAM_HANDLED;
if (!is_user_alive( idVictim ) && !arrBoolData[idVictim][PB_ISCONNECTED])
return HAM_HANDLED;
if ((get_user_weapon(idAttacker) == CSW_KNIFE))
return HAM_IGNORED;
if ( (idVictim == idAttacker) || !is_user_connected(idAttacker) ||
(get_user_team(idVictim) == get_user_team(idAttacker))
)
return HAM_HANDLED;
if(arrIsEffectBubble[idAttacker] == true)
clRacePriest::stBubbles(idAttacker);
new iSkillLevel = SM_GetSkillLevel(idVictim, SKILL_PRIEST_SPIRITUAL_ACCURACY);
if (iSkillLevel > 0 && isDisabledSkillsOnMap(idVictim,SKILL_PRIEST_SPIRITUAL_ACCURACY) == false)
{
new Float:fSpiritual = ArrayGetCell(arrSpiritualAccuracy,iSkillLevel-1);
if (is_user_alive( idVictim ) && arrBoolData[idVictim][PB_ISCONNECTED]&&
random_float(fPriestSkill3MinPercent,fPriestSkill3MaxPercent) <= fSpiritual &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false &&
arrIsEffectBubble[idAttacker] == false)
{
clRacePriest::skillSpAccuracy(idVictim,idAttacker);
}
}
if (!arrFireWeapon[idAttacker])
return HAM_HANDLED;
if (!(damage_type & DMG_BULLET))
return HAM_HANDLED;
iSkillLevel = SM_GetSkillLevel(idAttacker, SKILL_PRIEST_SACRED_FIRE);
if (iSkillLevel > 0 && isDisabledSkillsOnMap(idAttacker,SKILL_PRIEST_SACRED_FIRE) == false)
{
new Float:fSacredfire = ArrayGetCell(arrSacredFire,iSkillLevel-1);
if (is_user_alive( idAttacker ) && arrBoolData[idAttacker][PB_ISCONNECTED]&&
random_float(fPriestSkill2MinPercent,fPriestSkill2MaxPercent) <= fSacredfire &&
arrBoolData[idAttacker][PB_ISFROZENSKILL] == false)
{
fStartFire(idVictim, idAttacker);
arrIsWorkFireWeapon[idAttacker] = true;
}
}
return HAM_IGNORED;
}
fStartFire(idVictim, idAttacker)
{
static params[3];
params[0] = floatround(fFireDuration * 5.0); // duration
params[1] = idAttacker; // attacker
params[2] = idVictim + clRacePriest::tID_SACRED_FIRE;
if (task_exists(idVictim + clRacePriest::tID_SACRED_FIRE ))
return;
set_task(0.2, "fBurningFlame",params[2], params, sizeof params);
}
public fBurningFlame(args[3])
{
//client_print(0,print_chat,"fBurningFlame");
new idUser = args[2];
if (args[2] >= clRacePriest::tID_SACRED_FIRE )
idUser -= clRacePriest::tID_SACRED_FIRE;
if (!is_user_alive(idUser))
return;
static Float:originF[3]
pev(idUser, pev_origin, originF)
if ((pev(idUser, pev_flags) & FL_INWATER) || FLAME_DURATION < 1)
{
// Smoke sprite
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SMOKE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]); // x
engfunc(EngFunc_WriteCoord, originF[1]); // y
engfunc(EngFunc_WriteCoord, originF[2]-50.0); // z
write_short(arrIdSprites[SPR_SMOKE_PRIEST]); // sprite
write_byte(random_num(15, 20)); // scale
write_byte(random_num(10, 20)); // framerate
message_end()
return;
}
if ((pev(idUser, pev_flags) & FL_ONGROUND) && fFireSlowdown > 0.0)
{
static Float:velocity[3];
pev(idUser, pev_velocity, velocity);
xs_vec_mul_scalar(velocity, fFireSlowdown, velocity);
set_pev(idUser, pev_velocity, velocity);
}
new health = clHP:getUserHealth(idUser);
if (health > fFireDamage)
clHP:setUserHealth(idUser,health - floatround(fFireDamage));
else
ExecuteHamB(Ham_Killed, idUser, FLAME_ATTACKER, 0);
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SPRITE); // TE id
engfunc(EngFunc_WriteCoord, originF[0]+random_float(-5.0, 5.0)); // x
engfunc(EngFunc_WriteCoord, originF[1]+random_float(-5.0, 5.0)); // y
engfunc(EngFunc_WriteCoord, originF[2]+random_float(-10.0, 10.0)); // z
write_short(arrIdSprites[SPR_FIRE_PRIEST]); // sprite
write_byte(random_num(5, 10)); // scale
write_byte(200); // brightness
message_end();
// Decrease burning duration counter
FLAME_DURATION -= 1;
new Float:firl_time
if (0.2 > fFireDuration)
firl_time = fFireDuration - 0.1;
else
firl_time = 0.2;
set_task(firl_time, "fBurningFlame", args[2], args, sizeof args);
}
// *******************************************************
// —кил 3 уровн¤ - ƒуховна¤ меткость - Spiritual accuracy - защитный
// *******************************************************
public clRacePriest::skillSpAccuracy(idVictim,idAttacker)
{
if(!arrBoolData[idAttacker][PB_ISCONNECTED])
return 0;
clRacePriest::stBubbles(idAttacker);
if (task_exists(idAttacker + clRacePriest::tID_SP_ACCURACY ) == 0 )
{
set_user_hitzones(idAttacker, 0, 0); //ƒелаем холостые выстрелы
arrIsEffectBubble[idAttacker] = true;
set_task(0.7, "_setTaskResetSPA", clRacePriest::tID_SP_ACCURACY + idAttacker );
}
return 0;
}
public clRacePriest::setTaskResetSPA(idAttacker)
{
if (idAttacker >= clRacePriest::tID_SP_ACCURACY )
idAttacker -= clRacePriest::tID_SP_ACCURACY;
if(!arrBoolData[idAttacker][PB_ISCONNECTED])
return;
set_user_hitzones(idAttacker, 0, 255); // ¬осстанавливаем нормальный режим стрельбы
arrIsEffectBubble[idAttacker] = false;
}
stock clRacePriest::stBubbles(idAttacker)
{
new ptPlayerOrigin[3], ptBulletOrigin[3];
get_user_origin(idAttacker, ptPlayerOrigin, 1);
get_user_origin(idAttacker, ptBulletOrigin, 4);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY, ptBulletOrigin);
write_byte(114);
write_coord(ptPlayerOrigin[0]);
write_coord(ptPlayerOrigin[1]);
write_coord(ptPlayerOrigin[2]);
write_coord(ptBulletOrigin[0]);
write_coord(ptBulletOrigin[1]);
write_coord(ptBulletOrigin[2]);
write_coord(40);
write_short(arrIdSprites[SPR_BUBBLE_PRIEST]);
write_byte(10);
write_coord(40);
message_end();
}
// *******************************************************
// —упер навык - —лово “ьмы - —мерть - Darkness word: Death
// *******************************************************
public clRacePriest::ultDarkWordDeath(idVictim)
{
if ( !ULT_Available( idVictim ) )
return;
if ( arrBoolData[idVictim][PB_CHANGINGTEAM] )
return;
//Ѕлокировка супер навыка если у игрока ќжерелье {
new Float:ptVictim[3]
pev(idVictim, pev_origin, ptVictim);
new arrPlayers[32], iNumPlayers;
get_players(arrPlayers, iNumPlayers, "a" );
new iTargetID;
new iTeam = get_user_team( idVictim );
for(new i = 0; i < iNumPlayers; i++)
{
iTargetID = arrPlayers[i];
if(iTargetID == idVictim)
continue;
if(is_user_alive(iTargetID))
{
new Float:ptOriginTarget[3], Float:fDistance;
pev(iTargetID, pev_origin, ptOriginTarget);
fDistance = get_distance_f(ptVictim, ptOriginTarget);
//client_print(idVictim,print_chat,"fDistance: %.1f",fDistance);
if(fDistance <= fBlockUltRadius && iTeam != get_user_team(iTargetID))
{
if (ULT_CanUserBlockUlt(iTargetID,idVictim))
{
ULT_RemoveCharge(iTargetID);
ULT_Blocked(idVictim);
fResetUltimateTimerDivider(idVictim);
return;
}
}
}
}
//Ѕлокировка супер навыка если у игрока ќжерелье }
set_pev(idVictim, pev_sequence, 12);
set_pev(idVictim, pev_animtime, halflife_time());
set_pev(idVictim, pev_framerate, 1.0);
set_pev(idVictim, pev_movetype, MOVETYPE_NONE);
new Float:ptOrigin[3];
pev(idVictim, pev_origin, ptOrigin);
clRacePriest::stGetPos(idVictim, 150.0, 0.0, 0.0, ptOrigin);
emit_sound(idVictim,CHAN_STATIC, arrStrSounds[SOUND_FIREBALL_PRIEST], 0.5, ATTN_NORM,SND_CHANGE_VOL, PITCH_NORM);
new taskParm[4]
taskParm[0] = idVictim;
taskParm[1] = floatround(ptOrigin[0]);
taskParm[2] = floatround(ptOrigin[1]);
taskParm[3] = floatround(ptOrigin[2]);
set_task(0.5, "_fSetFireAttack", idVictim + clRacePriest::tID_FIRE_ATTACK, taskParm, 4 );
set_task(3.0, "_fStopUlt", idVictim + clRacePriest::tID_REMOVE_ATTACK);
fResetUltimateTimerDivider(idVictim);
}
public clRacePriest::fSetFireAttack(taskParm[4])
{
new idVictim = taskParm[0];
new Float:ptSkyOrigin[3];
ptSkyOrigin[0] = float(taskParm[1]);
ptSkyOrigin[1] = float(taskParm[2]);
ptSkyOrigin[2] = float(taskParm[3]);
new Float:ptExplosion[24][3], Float:ptBall[24][3]
ptExplosion[0][0] = 200.0;
ptExplosion[0][1] = 0.0;
ptExplosion[0][2] = ptSkyOrigin[2];
ptExplosion[1][0] = 400.0;
ptExplosion[1][1] = 0.0;
ptExplosion[1][2] = ptSkyOrigin[2];
ptExplosion[2][0] = -200.0;
ptExplosion[2][1] = 0.0;
ptExplosion[2][2] = ptSkyOrigin[2];
ptExplosion[3][0] = -400.0;
ptExplosion[3][1] = 0.0;
ptExplosion[3][2] = ptSkyOrigin[2];
ptExplosion[4][0] = 0.0;
ptExplosion[4][1] = 200.0;
ptExplosion[4][2] = ptSkyOrigin[2];
ptExplosion[5][0] = 0.0;
ptExplosion[5][1] = 400.0;
ptExplosion[5][2] = ptSkyOrigin[2];
ptExplosion[6][0] = 0.0;
ptExplosion[6][1] = -200.0;
ptExplosion[6][2] = ptSkyOrigin[2];
ptExplosion[7][0] = 0.0;
ptExplosion[7][1] = -400.0;
ptExplosion[7][2] = ptSkyOrigin[2];
ptExplosion[8][0] = 200.0;
ptExplosion[8][1] = 200.0;
ptExplosion[8][2] = ptSkyOrigin[2];
ptExplosion[9][0] = 400.0;
ptExplosion[9][1] = 400.0;
ptExplosion[9][2] = ptSkyOrigin[2];
ptExplosion[10][0] = 200.0;
ptExplosion[10][1] = 400.0;
ptExplosion[10][2] = ptSkyOrigin[2];
ptExplosion[11][0] = 400.0;
ptExplosion[11][1] = 200.0;
ptExplosion[11][2] = ptSkyOrigin[2];
ptExplosion[12][0] = -200.0;
ptExplosion[12][1] = 200.0;
ptExplosion[12][2] = ptSkyOrigin[2];
ptExplosion[13][0] = -400.0;
ptExplosion[13][1] = 400.0;
ptExplosion[13][2] = ptSkyOrigin[2];
ptExplosion[14][0] = -200.0
ptExplosion[14][1] = 400.0
ptExplosion[14][2] = ptSkyOrigin[2];
ptExplosion[15][0] = -400.0;
ptExplosion[15][1] = 200.0;
ptExplosion[15][2] = ptSkyOrigin[2];
ptExplosion[16][0] = -200.0;
ptExplosion[16][1] = -200.0;
ptExplosion[17][2] = ptSkyOrigin[2];
ptExplosion[17][0] = -200.0;
ptExplosion[17][1] = -200.0;
ptExplosion[17][2] = ptSkyOrigin[2];
ptExplosion[18][0] = -200.0;
ptExplosion[18][1] = -400.0;
ptExplosion[18][2] = ptSkyOrigin[2];
ptExplosion[19][0] = -400.0;
ptExplosion[19][1] = -200.0;
ptExplosion[19][2] = ptSkyOrigin[2];
ptExplosion[20][0] = 200.0;
ptExplosion[20][1] = -200.0;
ptExplosion[20][2] = ptSkyOrigin[2];
ptExplosion[21][0] = 400.0;
ptExplosion[21][1] = -400.0;
ptExplosion[21][2] = ptSkyOrigin[2];
ptExplosion[22][0] = 200.0;
ptExplosion[22][1] = -400.0;
ptExplosion[22][2] = ptSkyOrigin[2];
ptExplosion[23][0] = 400.0;
ptExplosion[23][1] = -200.0;
ptExplosion[23][2] = ptSkyOrigin[2];
for(new i = 0; i < sizeof(ptExplosion); i++)
{
ptBall[i][0] = float(taskParm[1]);
ptBall[i][1] = float(taskParm[2]);
ptBall[i][2] = float(taskParm[3]);
clRacePriest::stGetPos(idVictim, ptExplosion[i][0], ptExplosion[i][1], ptExplosion[i][2], ptBall[i])
clRacePriest::fCreateFireball(idVictim, ptBall[i])
}
set_task(1.0, "_fSetFireAttack", idVictim + clRacePriest::tID_FIRE_ATTACK, taskParm, 4 );
}
stock clRacePriest::stGetPos(idUser, Float:fForward, Float:fRight, Float:fUp, Float:fVecStart[])
{
new Float:fVecAngle[3], Float:fVecForward[3], Float:fVecRight[3], Float:fViewOfs[3];
pev(idUser, pev_view_ofs,fViewOfs);
xs_vec_add(fVecStart,fViewOfs,fVecStart)
pev(idUser, pev_v_angle, fVecAngle);
fVecAngle[0] = 0.0;
angle_vector(fVecAngle,ANGLEVECTOR_FORWARD,fVecForward);
angle_vector(fVecAngle,ANGLEVECTOR_RIGHT,fVecRight);
angle_vector(fVecAngle,ANGLEVECTOR_UP,fViewOfs);
fVecStart[0] = fVecStart[0] + fVecForward[0] * fForward + fVecRight[0] * fRight + fViewOfs[0] * fUp;
fVecStart[1] = fVecStart[1] + fVecForward[1] * fForward + fVecRight[1] * fRight + fViewOfs[1] * fUp;
fVecStart[2] = fVecStart[2] + fVecForward[2];
}
public clRacePriest::fCreateFireball(idUser, Float:ptOrigin[3])
{
new entBall = create_entity("info_target");
static Float:fAngles[3];
pev(idUser, pev_angles, fAngles);
entity_set_origin(entBall, ptOrigin);
fAngles[0] = -100.0;
entity_set_vector(entBall, EV_VEC_angles, fAngles);
fAngles[0] = 100.0;
entity_set_vector(entBall, EV_VEC_v_angle, fAngles);
entity_set_string(entBall, EV_SZ_classname, "entBallFire");
entity_set_model(entBall, arrStrModels[MDL_FIREBALL]);
entity_set_int(entBall, EV_INT_solid, 2);
entity_set_int(entBall, EV_INT_movetype, MOVETYPE_FLY);
new Float:fMaxsSize[3] = {15.0, 15.0, 15.0};
new Float:fMinSize[3] = {-15.0, -15.0, -15.0};
entity_set_size(entBall, fMinSize, fMaxsSize);
set_pev(entBall, pev_owner, idUser);
static Float:fVelocity[3];
VelocityByAim(entBall, random_num(250, 1000), fVelocity);
set_pev(entBall, pev_light_level, 180);
set_pev(entBall, pev_rendermode, kRenderTransAdd);
set_pev(entBall, pev_renderamt, 255.0);
entity_set_vector(entBall, EV_VEC_velocity, fVelocity);
clRacePriest::fBurning(entBall, 0.5);
}
public clRacePriest::fStopUlt(idUser)//ќстановка работающей ульты ∆реца
{
if (idUser >= clRacePriest::tID_REMOVE_ATTACK)
idUser -= clRacePriest::tID_REMOVE_ATTACK;
remove_task(idUser + clRacePriest::tID_FIRE_ATTACK);
}
public clRacePriest::fBurning(entBall, Float:fSize)
{
static entEnvSprite;
entEnvSprite = create_entity("env_sprite");
set_pev(entEnvSprite, pev_takedamage, 0.0);
set_pev(entEnvSprite, pev_solid, SOLID_NOT);
set_pev(entEnvSprite, pev_movetype, MOVETYPE_NONE);
set_pev(entEnvSprite, pev_classname, "_entBallFire");
engfunc(EngFunc_SetModel, entEnvSprite, arrStrSprites[SPR_FLAME_PRIEST]);
set_pev(entEnvSprite, pev_rendermode, kRenderTransAdd);
set_pev(entEnvSprite, pev_renderamt, 255.0);
set_pev(entEnvSprite, pev_light_level, 180);
set_pev(entEnvSprite, pev_scale, fSize);
set_pev(entEnvSprite, pev_owner, entBall);
set_pev(entEnvSprite, pev_animtime, get_gametime());
set_pev(entEnvSprite, pev_framerate, 8.0);
set_pev(entEnvSprite, pev_frame, 0.1);
set_pev(entEnvSprite, pev_spawnflags, SF_SPRITE_STARTON);
dllfunc(DLLFunc_Spawn, entEnvSprite);
thinkBallFire(entEnvSprite);
set_pev(entEnvSprite, pev_nextthink, get_gametime() + 0.01);
return entEnvSprite;
}
public thinkBallFire(entBallFire)
{
if(!pev_valid(entBallFire))
return;
if(!pev_valid(pev(entBallFire, pev_owner)))
{
remove_entity(entBallFire);
return;
}
static idOwner;
idOwner = pev(entBallFire, pev_owner);
static Float:ptOrigin[3];
pev(idOwner, pev_origin, ptOrigin);
ptOrigin[2] += 25.0;
entity_set_origin(entBallFire, ptOrigin);
set_pev(entBallFire, pev_nextthink, get_gametime() + 0.01);
}
public touchBallFire(entBallFire, idUserTouch)
{
if(!pev_valid(entBallFire))
return;
static Float:ptOrigin[3]
pev(entBallFire, pev_origin, ptOrigin);
new idOwner = pev(entBallFire, pev_owner);
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
engfunc(EngFunc_WriteCoord, ptOrigin[0]);
engfunc(EngFunc_WriteCoord, ptOrigin[1]);
engfunc(EngFunc_WriteCoord, ptOrigin[2]);
write_short(arrIdSprites[SPR_ZEXPLODE_PRIEST]);
write_byte(10);
write_byte(30);
write_byte(4);
message_end();
emit_sound(entBallFire,CHAN_STATIC, arrStrSounds[SOUND_FIREBALL_EXP_PRIEST], 0.07, ATTN_NORM,SND_CHANGE_VOL, PITCH_NORM);
new arrPlayers[32], iNumPlayers;
get_players(arrPlayers, iNumPlayers, "a" );
new iTargetID;
new iTeam = get_user_team( idOwner );
for(new i = 0; i < iNumPlayers; i++)
{
iTargetID = arrPlayers[i];
if(is_user_alive(iTargetID))
{
new Float:ptOriginTarget[3], Float:fDistance;
pev(iTargetID, pev_origin, ptOriginTarget);
fDistance = get_distance_f(ptOrigin, ptOriginTarget);
if(fDistance <= fBallExpRadius && iTeam != get_user_team(iTargetID))
{
clRacePriest::stShakeScreenPriest(iTargetID);
WC3_Damage(iTargetID,idOwner,iWordDeathDmg,CSW_WORDDEATH, -1 );
clRacePriest::stScreenFadePriest(iTargetID, 3, {255, 0, 0}, 120);
}
}
}
remove_entity(entBallFire);
}
stock clRacePriest::stScreenFadePriest(idUser, Timer, Colors[3], Alpha)
{
message_begin(MSG_ONE_UNRELIABLE,gmsgScreenFade,_, idUser);
write_short((1<<12) * Timer);
write_short(1<<12);
write_short(0);
write_byte(Colors[0]);
write_byte(Colors[1]);
write_byte(Colors[2]);
write_byte(Alpha);
message_end();
}
stock clRacePriest::stShakeScreenPriest(idUser)
{
message_begin(MSG_ONE_UNRELIABLE,gmsgScreenShake,{0,0,0}, idUser);
write_short(1<<14);
write_short(1<<13);
write_short(1<<13);
message_end();
}
Код:
//-----------------Базовые функции------------------------------------BEGIN {
//Инициализация переменных
public fInitTalisman()//добавлена в war3ft.inl (public WC3_Init())
{
fTimeSpawnTalismanGlobal = get_pcvar_float( CVAR_wc3_gl_time_spawn_talisman );
}
//Обнуление данных когда игрок подключается на сервер
public fPlayerInitTalisman(idUser) //добавлена в war3ft.inl ( WC3_PlayerInit(idUser) )
{
arrTalismanActive[idUser] = TALISMAN_ITEM_NONE;
arrTalismanChange[idUser] = TALISMAN_ITEM_NONE;
arrTalismanNum[idUser] = 0;
arrPlayerInitTalisman[idUser] = false; //Загрузка всех талисманов когда игрок зашел на сервер и появилось меню выбора рас (грузится один раз)
arrTalismanNecklaceNum[idUser] = 0; // Массив игроков для количества зарядов иммунитета от ульты (Ожерелье)
arrTalismanHelmNum[idUser] = 0; // Массив игроков для количества зарядов (Шлем)
}
//Присвоение данных при респе игрока
public fPostSpawnTalisman(idUser)//добавлена в war3ft.inl ( WC3_PostSpawn(idUser) )
{
arrTalismanNecklaceNum[idUser] = TALISMAN_ITEM_NECKLACE_NUM;
arrTalismanHelmNum[idUser] = TALISMAN_ITEM_HELM_NUM;
}
//Когда игрок умирает
public fTalismanUserDied(idUser)//добавлена в war3ft.inl ( public WC3_Death( idVictim, iKiller, iWeaponID, iHeadshot ) )
{
if(arrTalismanNecklaceNum[idUser] > 0)
arrTalismanNecklaceNum[idUser] = 0;
if(arrTalismanHelmNum[idUser] > 0)
arrTalismanHelmNum[idUser] = 0;
}
//Удаление зарядов
public fTalismanRemoveCharge(idUser, iItem)//добавлена в items.inl ( ITEM_RemoveCharge( idUser, iItem ) )
{
switch(iItem)
{
case ITEM_NECKLACE:
{
//Ожерелье
if (arrTalismanNecklaceNum[idUser] > 0 && ITEM_Has( idUser, ITEM_NECKLACE ) == ITEM_NONE)
{
arrTalismanNecklaceNum[idUser] -= CHARGE_DISPOSE;
if (arrTalismanNecklaceNum[idUser] <= 0 )
arrTalismanNecklaceNum[idUser] = 0;
}
}
case ITEM_HELM:
{
//Шлем
if (arrTalismanHelmNum[idUser] > 0 && ITEM_Has( idUser, ITEM_HELM ) == ITEM_NONE)
{
arrTalismanHelmNum[idUser] -= CHARGE_DISPOSE;
if (arrTalismanHelmNum[idUser] <= 0 )
arrTalismanHelmNum[idUser] = 0;
}
}
}
}
//Выводит кто подобрал талисман и какой для всех игроков кроме подобравшего
public fPrintChatTalismanFound(idUserPickUp,szItemName[])
{
new szPlayerTouchName[32]
get_user_name(idUserPickUp, szPlayerTouchName, charsmax(szPlayerTouchName));
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_PICKUP",szPlayerTouchName,szItemName);
new arrPlayers[32], iNumPlayers;
get_players( arrPlayers, iNumPlayers );
for (new i = 0; i < iNumPlayers; i++ )
{
new idPlayer = arrPlayers[i];
if(idPlayer == idUserPickUp)
continue;
ChatColor(idPlayer,"%s%s",fTagWar3ft(),szMessage);
}
//Лог кто подобрал и какой талисман
fTalismanPlayerPickUpLog(idUserPickUp,szItemName);
}
//Считывание всех талисманов игроков из базы данных на выбор рас
public fTalismanInit(idUser)
{
arrTalismanActive[idUser] = TALISMAN_ITEM_NONE;
arrTalismanChange[idUser] = TALISMAN_ITEM_NONE;
arrTalismanNum[idUser] = 0;
if(MAX_MODE_TALISMAN == 1)
{
for(new i = 0; i < MAX_TALISMANS; i++)
arrListTalisman[idUser][i] = TALISMAN_ITEM_NONE;
//Считываем из базы данных все талисманы игрока
DB_GetAllTalisman(idUser);
}
else
{
//Присвоение всех талисманов игроку
for(new i = 0; i < MAX_TALISMANS; i++)
arrListTalisman[idUser][i] = LIST_TALISMANS[i];
}
}
//Считывание файла респаунов талисмана для конкретной карты
fReadMapSpawnsTalisman()//добавлена в war3ft.inl (public WC3_Init())
{
new szMap[32], szConfig[32], szMapFile[256];
get_mapname(szMap, charsmax(szMap));
get_configsdir(szConfig, charsmax(szConfig));
format(szMapFile, charsmax(szMapFile), "%s\war3ft\talisman\%s.talisman_spawns.cfg",szConfig, szMap);
iTotalSpawnsTalisman = 0;
if (file_exists(szMapFile))
{
new szDataFile[124];
new iLength;
new iLine = 0;
new szPos[4][8];
while(iTotalSpawnsTalisman < MAX_SPAWNS_TALISMAN && (iLine = read_file(szMapFile , iLine , szDataFile ,charsmax(szDataFile), iLength) ) != 0 )
{
if (strlen(szDataFile) < 2) continue;
parse(szDataFile, szPos[1], 7, szPos[2], 7, szPos[3], 7);
//Координаты
arrSpawnOrigin[iTotalSpawnsTalisman][0] = str_to_num(szPos[1]);
arrSpawnOrigin[iTotalSpawnsTalisman][1] = str_to_num(szPos[2]);
arrSpawnOrigin[iTotalSpawnsTalisman][2] = str_to_num(szPos[3]);
iTotalSpawnsTalisman++;
}
}
log_amx("Total Spawns Talisman: %d | Map: %s",iTotalSpawnsTalisman,szMap);
}
//Отсчет времени каждую секунду
public taskCounterLoopTalisman()//добавлена в ultimates.cpp ( public _ULT_Delay() )
{
if(MAX_MODE_TALISMAN != 1)
return;
if(iTotalSpawnsTalisman <= 0)//Если нет респаунов для талисмана
return;
//Если талисман не подобрали
if(bIsPickUpTalisman == true)
return;
new iNumPlayers = get_playersnum();
if (iNumPlayers < get_pcvar_num( CVAR_wc3_pl_talisman_respawn ) )
return;
// fTimeSpawnTalismanGlobal += TIME_TASK_SPAWN_TALISMAN;
fTimeSpawnTalismanGlobal += 1.0;
set_pcvar_float(CVAR_wc3_gl_time_spawn_talisman,fTimeSpawnTalismanGlobal);
//client_print(0,print_chat,"TimeSoawnTalismanGlobal: %f",fTimeSpawnTalismanGlobal);
if(fTimeSpawnTalismanGlobal >= TIME_SPAWN_TALISMAN)
{
fTimeSpawnTalismanGlobal = 0.0;
set_pcvar_float(CVAR_wc3_gl_time_spawn_talisman,fTimeSpawnTalismanGlobal);
fCreateTalisman();
}
}
//Создание модели талисмана
public fCreateTalisman()
{
if(MAX_MODE_TALISMAN != 1)
return -1;
entTalisman = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
if(!pev_valid(entTalisman))
return -1;
new iSelectPoint = random_num(0,iTotalSpawnsTalisman-1);
new Float:origin[3];
//arrSpawnOrigin[iSelectPoint][2] -= 15;
IVecFVec(arrSpawnOrigin[iSelectPoint],origin);//перевод целого вектора в float
set_pev(entTalisman, pev_classname, szClassNameTalisman);
set_pev(entTalisman, pev_nextthink, get_gametime() + 5.0);
set_pev(entTalisman, pev_solid, SOLID_TRIGGER);
// set_pev(entTalisman, pev_solid, SOLID_SLIDEBOX);
set_pev(entTalisman, pev_movetype, MOVETYPE_FLY);
// set_pev(entTalisman,pev_movetype,MOVETYPE_NOCLIP);
set_pev(entTalisman, pev_sequence, 1);
// set_pev(entTalisman, pev_flags, pev(entTalisman, pev_flags) & FL_ONGROUND);
set_pev(entTalisman, pev_frame, 0);
//set_pev(entTalisman, pev_gravity, 0.5);
//set_pev(entTalisman, pev_friction, 0.0);
set_pev(entTalisman,pev_velocity,Float:{0.0,0.0,0.0});
engfunc(EngFunc_SetModel, entTalisman, arrStrModels[MDL_FUN_SUPPLYBOX]);
origin[2] -= 25;
set_pev(entTalisman, pev_origin, origin);
emit_sound(entTalisman, CHAN_VOICE, arrStrSounds[SOUND_REINCARNATION], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
//Запись логов
fTalismanLog(arrSpawnOrigin[iSelectPoint][0],arrSpawnOrigin[iSelectPoint][1],arrSpawnOrigin[iSelectPoint][2]);
//Сообщение о респауне нового талисмана
new szShowMsgTalisman[256];
format(szShowMsgTalisman, charsmax(szShowMsgTalisman), "%L",LANG_PLAYER,"WC3_MSG_RESPAWN_TALISMAN");
set_dhudmessage(119, 136, 153, -1.0, -1.0, 2, 1.0, 2.0, 0.01, 0.01, -1);
show_dhudmessage(0, szShowMsgTalisman);
cssbChatColor(0,"%s%s",fTagWar3ft(),szShowMsgTalisman);
bIsPickUpTalisman = true;
return -1;
}
//Вращение талисмана
//register_think("war3ft_talisman", "Talisman_Think");
public Talisman_Think(const entTalismanThink)//добавлена в cssbWar3ftMod.sma
{
if(!pev_valid(entTalismanThink))
return;
static Float:floatvector[3];
floatvector[0] = 0.0;
floatvector[1] = 25.0;
floatvector[2] = 0.0;
set_pev(entTalismanThink,pev_avelocity,floatvector);//Задает скорость вращения вокруг своей оси
set_pev(entTalismanThink, pev_nextthink, get_gametime() + 5.0);
}
//Когда игрок прикасается к талисману
public touchPlayerTalisman(idEntityTouched, idUserTouch)//добавлена в loot.inl (public player_Touch(idEntityTouched, idUserTouch))
{
if (!pev_valid(idEntityTouched) || !is_user_alive(idUserTouch))
return FMRES_IGNORED;
new classname[32];
pev(idEntityTouched, pev_classname, classname, sizeof classname - 1);
if (equali(classname, "war3ft_talisman"))
{
//Достигнут максимум найденных талисманов 25
if(arrTalismanNum[idUserTouch] >= MAX_TALISMANS)
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_MAX_TALISMANS",MAX_TALISMANS);
fShowSyncMessageRandomColor(idUserTouch,szMessage,0,0.05, 0.45);
arrTalismanNum[idUserTouch] = MAX_TALISMANS;
return FMRES_IGNORED;
}
//Генерация выбора талика
new iSelect = random_num(0,MAX_TALISMANS-1);
if(!bIsPlayerPresenceTalisman(idUserTouch,LIST_TALISMANS[iSelect]))//Если нет в наличии талисмана
{
if (is_valid_ent(idEntityTouched))
engfunc(EngFunc_RemoveEntity, idEntityTouched);
entTalisman = 0;
bIsPickUpTalisman = false;
arrListTalisman[idUserTouch][iSelect] = LIST_TALISMANS[iSelect];
new szItemName[32];
LANG_GetItemName(LIST_TALISMANS[iSelect], idUserTouch, szItemName, 31, true );
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_FOUND",szItemName);
cssbChatColor(idUserTouch,"%s%s",fTagWar3ft(),szMessage);
fPrintChatTalismanFound(idUserTouch,szItemName);
arrTalismanNum[idUserTouch]++;
//Отображаем меню с талисманами при подборе
fShowMenuTalismans(idUserTouch);
}
else //Если есть такой талисман
{
new iNewTalisman = TALISMAN_ITEM_NONE;
//Поиск талисмана которого нет у игрока
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(arrListTalisman[idUserTouch][i] == TALISMAN_ITEM_NONE)
{
iNewTalisman = LIST_TALISMANS[i];
arrListTalisman[idUserTouch][i] = iNewTalisman;
break;
}
}
if(iNewTalisman != TALISMAN_ITEM_NONE)
{
if (is_valid_ent(idEntityTouched))
engfunc(EngFunc_RemoveEntity, idEntityTouched);
entTalisman = 0;
bIsPickUpTalisman = false;
new szItemName[32];
LANG_GetItemName(iNewTalisman, idUserTouch, szItemName, 31, true );
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_FOUND",szItemName);
cssbChatColor(idUserTouch,"%s%s",fTagWar3ft(),szMessage);
fPrintChatTalismanFound(idUserTouch,szItemName);
arrTalismanNum[idUserTouch]++;
//Отображаем меню с талисманами при подборе
fShowMenuTalismans(idUserTouch);
}
}
}
return FMRES_IGNORED;
}
//Проверка на наличие талисмана у игрока
bool:bIsPlayerPresenceTalisman(idUser,iTalismanValue)
{
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(arrListTalisman[idUser][i] == iTalismanValue)
return true;
}
return false;
}
// Функция проверяющая доступ к меню талисманов
public fVipTalisman()
{
new szFlags[24];
get_pcvar_string(CVAR_wc3_talisman_flag, szFlags, 23 );
return ( read_flags( szFlags ) );
}
//Проверка на существование талисмана
bool:bIsTalisman(iTalismanValue)
{
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(LIST_TALISMANS[i] == iTalismanValue)
return true;
}
return false;
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Базовые функции-----------------------------------------------END }
//-----------------Функции меню-----------------------BEGIN {
//Вызов отображения меню
fShowMenuTalismans(idUser)
{
if(MAX_MODE_TALISMAN == 1 && arrTalismanNum[idUser] == 0)
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_NO");
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
return;
}
if(MAX_MODE_TALISMAN == 3)
{
if(!(get_user_flags(idUser) & fVipTalisman()))
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_VIP");
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
return;
}
}
new iNumPlayers = get_playersnum();
if (iNumPlayers < get_pcvar_num( CVAR_wc3_pl_talisman_activate ) )
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_MAX_PL_ACTIVATE",get_pcvar_num( CVAR_wc3_pl_talisman_activate ));
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
return;
}
//Присвоение всех талисманов игроку если у игрока максимальное количество талисманов
if(arrTalismanNum[idUser] >= MAX_TALISMANS)
{
for(new i = 0; i < MAX_TALISMANS; i++)
arrListTalisman[idUser][i] = LIST_TALISMANS[i];
}
new idMenu,szBuffer[64],szMenuData[256],szTalismanData[256];
//Название главного меню
formatex(szMenuData, charsmax(szMenuData), "\y%L", LANG_PLAYER, "MENU_TALISMAN_MENU_NAME");
idMenu = menu_create(szMenuData, "_Callback_MENU_Talisman");
// Добавление пунктов в меню
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(arrListTalisman[idUser][i] == TALISMAN_ITEM_NONE)
continue;
new szItemName[32];
LANG_GetItemName(arrListTalisman[idUser][i], idUser, szItemName, 31, true );
formatex(szTalismanData, charsmax(szTalismanData), "%L '\y%s'",LANG_PLAYER,"WC3_KEY_TALISMAN", szItemName);
formatex(szBuffer, charsmax(szBuffer), "%d", arrListTalisman[idUser][i]);
menu_additem(idMenu,szTalismanData, szBuffer,0,-1);
}
// Если нет предметов в меню
if (menu_items(idMenu) <= 0)
{
menu_destroy(idMenu);
return;
}
//Пункты меню (назад - следующий - выход)
formatex(szMenuData, charsmax(szMenuData), "\d%L", LANG_PLAYER, "WC3_MENU_BACK");
menu_setprop(idMenu, MPROP_BACKNAME, szMenuData);
formatex(szMenuData, charsmax(szMenuData), "\d%L", LANG_PLAYER, "WC3_MENU_NEXT");
menu_setprop(idMenu, MPROP_NEXTNAME, szMenuData);
formatex(szMenuData, charsmax(szMenuData), "\d%L", LANG_PLAYER, "WC3_MENU_EXIT");
menu_setprop(idMenu, MPROP_EXITNAME, szMenuData);
menu_display(idUser, idMenu);
}
//Функция выбора пунктов в меню выбора
public _Callback_MENU_Talisman(idUser, idMenu, idItem)
{
if ( !WC3_Check() )
return PLUGIN_HANDLED;
// Меню будет закрыто
if (idItem == MENU_EXIT)
{
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
static _access, szInfoMenu[8], callback;
menu_item_getinfo(idMenu, idItem, _access, szInfoMenu, sizeof(szInfoMenu) - 1, _, _, callback);
new iNumberTalisman = str_to_num(szInfoMenu);
// client_print(0,print_chat,"iNumberTalisman: %d |idItem: %d",iNumberTalisman,idItem);
//Заблокирован ли талисман на карте
new szItemName[32];
if(isDisabledItemOnMap(idUser,iNumberTalisman,szItemName) == true)
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_DISABLED_ON_MAP",szItemName);
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
menu_destroy(idMenu);
return PLUGIN_HANDLED
}
//Заблокирован ли предмет для Расы
if(isDisabledItemRace(idUser,iNumberTalisman,szItemName) == true)
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_ITEM_BLOCK",szItemName);
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
//Если заблокировано или активно shopmenu 4
if(get_pcvar_num(CVAR_wc3_shopmenu4) > 0)
{
if( get_pcvar_num(CVAR_wc3_shopmenu4_vip ) > 0 &&
!(get_user_flags(idUser) & fVipShop4()) &&
iNumberTalisman >= 27)
{
formatex(szMessage, charsmax(szMessage), "%L - !t%L!",LANG_PLAYER,"MOTD_TITLE_SHOPMENU4",LANG_PLAYER,"CLIENT_PRINT_OFF");
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
}
else
{
if(iNumberTalisman >= 27)
{
formatex(szMessage, charsmax(szMessage), "%L - !t%L!",LANG_PLAYER,"MOTD_TITLE_SHOPMENU4",LANG_PLAYER,"CLIENT_PRINT_OFF");
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
}
//Если есть талисман
if(arrTalismanActive[idUser] != TALISMAN_ITEM_NONE)
{
arrTalismanChange[idUser] = iNumberTalisman;
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_CHANGE",szItemName);
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
}
else
{
//Присваиваем активный талисман
arrTalismanActive[idUser] = iNumberTalisman;
fActivateTalismanPassive(idUser, iNumberTalisman);
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_TALISMAN_ACTIVATE",szItemName);
cssbChatColor(idUser,"%s%s",fTagWar3ft(),szMessage);
WC3_ShowBar(idUser);
}
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции меню-----------------------END }
//-----------------Функции баз данных MYSQL и SQLITE------------------------------------BEGIN {
//Считывание всех талисманов из базы данных (базовая функция)
public DB_GetAllTalisman( idUser )//добавлена в war3ft.inl (WC3_PlayerInit( idUser ))
{
//Включено сохранение или нет
if (!idUser || MAX_MODE_TALISMAN != 1)
return;
// Get the Talisman
switch( g_DBType )
{
case DB_MYSQLX: MYSQLX_GetAllTalisman(idUser);
case DB_SQLITE: SQLITE_GetAllTalisman(idUser);
}
return;
}
//Считывание из базы данных MYSQL всех талисманов
MYSQLX_GetAllTalisman(idUser)
{
if ( !MYSQLX_Connection_Available() )
return;
new iUniqueID = DB_GetUniqueID( idUser );
if ( iUniqueID <= 0 )
{
WC3_Log( true, "[ERROR] Unable to retreive user's Unique ID" );
return;
}
//Запрос количества талиманов для игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "SELECT `talisman_num` FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );", iUniqueID );
new Handle:hQueryNumTalisman = SQL_PrepareQuery(g_DBConn, szQueryNumTalisman );
if ( !SQL_Execute( hQueryNumTalisman ) )
{
MYSQLX_Error(hQueryNumTalisman, szQueryNumTalisman, 100 );
return;
}
new iNumTalismansUser = 0;
// Цикл считывания из поля 'talisman_num'
while ( SQL_MoreResults( hQueryNumTalisman ) )
{
iNumTalismansUser = SQL_ReadResult( hQueryNumTalisman, 0 );
SQL_NextRow( hQueryNumTalisman );
}
//log_amx("iNumTalismansUser: %d",SQL_MoreResults( hQueryNumTalisman ) );
//Если у игрока талисамнов максимальное количество не нужно считывать из базы чтобы снизить нагрузку
if(iNumTalismansUser >= MAX_TALISMANS)
{
arrTalismanNum[idUser] = iNumTalismansUser;
return;
}
SQL_FreeHandle( hQueryNumTalisman );
//Запрос всех талисманов для игрока
new szQuery[256];
format(szQuery, 255, "SELECT `talisman_id` FROM `cssb_player_talisman` WHERE (`player_id` = '%d' );", iUniqueID );
new Handle:query = SQL_PrepareQuery( g_DBConn, szQuery );
if ( !SQL_Execute( query ) )
{
MYSQLX_Error( query, szQuery, 6 );
return;
}
// Обнуляем все талисманы
for ( new i = 0; i < MAX_TALISMANS; i++ )
arrListTalisman[idUser][i] = TALISMAN_ITEM_NONE;
new iTalismanID,iCounter = 0;
// Цикл считывания из поля 'talisman_id'
while ( SQL_MoreResults( query ) )
{
iTalismanID = SQL_ReadResult( query, 0 );
if ( iCounter < MAX_TALISMANS )
{
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(LIST_TALISMANS[i] == iTalismanID)
{
arrListTalisman[idUser][i] = LIST_TALISMANS[i];
arrTalismanNum[idUser]++;
break;
}
}
}
SQL_NextRow( query );
iCounter++;
}
SQL_FreeHandle( query );
// client_print(0,print_chat,"TalismanID MYSQLX_GetAllTalisman");
return;
}
fTalisman_MYSQLX_Save( idUser,iUniqueID )//добавлена в db_sqlite.inl (MYSQLX_Save( idUser ))
{
// client_print(0,print_chat,"TalismanID MYSQLX_Save:");
//Удаление записи по ID игрока
new szQueryDeleteTalisman[256];
format(szQueryDeleteTalisman, charsmax(szQueryDeleteTalisman), "DELETE FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );",iUniqueID);
new Handle:hQueryDeleteTalisman = SQL_PrepareQuery(g_DBConn, szQueryDeleteTalisman );
if ( !SQL_Execute( hQueryDeleteTalisman ) )
{
MYSQLX_Error(hQueryDeleteTalisman, szQueryDeleteTalisman, 104 );
return;
}
//SQL_FreeHandle( hQueryDeleteTalisman );
//Сохранение количества талиманов игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "REPLACE INTO `cssb_num_talisman` ( `player_id` , `talisman_num`) VALUES ( '%d', '%d' );", iUniqueID, arrTalismanNum[idUser]);
new Handle:hQueryNumTalisman = SQL_PrepareQuery(g_DBConn, szQueryNumTalisman );
if ( !SQL_Execute( hQueryNumTalisman ) )
{
MYSQLX_Error(hQueryNumTalisman, szQueryNumTalisman, 102 );
return;
}
// SQL_FreeHandle( hQueryNumTalisman );
//Если у игрока талисманов максимальное количество не нужно записывать в базу все талисманы чтобы снизить нагрузку
if(arrTalismanNum[idUser] >= MAX_TALISMANS)
return;
//Сохранение всех талисманов
for ( new iTalismanID = 0; iTalismanID < MAX_TALISMANS; iTalismanID++ )
{
if(arrListTalisman[idUser][iTalismanID] == TALISMAN_ITEM_NONE)
continue;
new iTalismanValue = arrListTalisman[idUser][iTalismanID];
new szQuery[512];
format( szQuery, 511, "REPLACE INTO `cssb_player_talisman` ( `player_id` , `talisman_id`) VALUES ( '%d', '%d' );", iUniqueID, iTalismanValue);
new Handle:query = SQL_PrepareQuery( g_DBConn, szQuery );
if ( !SQL_Execute( query ) )
{
MYSQLX_Error( query, szQuery, 5 );
return;
}
}
}
fTalisman_MYSQLX_Save_T( idUser,iUniqueID )//добавлена в db_sqlite.inl (MYSQLX_Save_T( idUser ))
{
// client_print(0,print_chat,"TalismanID MYSQLX_Save_T:");
//Удаление записи по ID игрока
new szQueryDeleteTalisman[256];
format(szQueryDeleteTalisman, charsmax(szQueryDeleteTalisman), "DELETE FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );",iUniqueID);
SQL_ThreadQuery(g_DBTuple,"_MYSQLX_Save_T", szQueryDeleteTalisman );
//Сохранение количества талиманов игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "REPLACE INTO `cssb_num_talisman` ( `player_id` , `talisman_num`) VALUES ( '%d', '%d' );", iUniqueID, arrTalismanNum[idUser]);
SQL_ThreadQuery(g_DBTuple,"_MYSQLX_Save_T", szQueryNumTalisman );
//Если у игрока талисманов максимальное количество не нужно записывать в базу все талисманы, чтобы снизить нагрузку
if(arrTalismanNum[idUser] >= MAX_TALISMANS)
return;
//Сохранение всех талисманов
for ( new iTalismanID = 0; iTalismanID < MAX_TALISMANS; iTalismanID++ )
{
if(arrListTalisman[idUser][iTalismanID] == TALISMAN_ITEM_NONE)
continue;
new iTalismanValue = arrListTalisman[idUser][iTalismanID];
new szQuery[512];
format( szQuery, 511, "REPLACE INTO `cssb_player_talisman` ( `player_id` , `talisman_id`) VALUES ( '%d', '%d' );", iUniqueID, iTalismanValue);
SQL_ThreadQuery( g_DBTuple, "_MYSQLX_Save_T", szQuery );
}
}
//Считывание из базы данных SQLITE всех талисманов
SQLITE_GetAllTalisman(idUser)
{
if ( !SQLITE_Connection_Available() )
return;
new iUniqueID = DB_GetUniqueID( idUser );
if ( iUniqueID <= 0 )
{
WC3_Log( true, "[ERROR] Unable to retreive user's Unique ID" );
return;
}
//Запрос количества талисманов для игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "SELECT `talisman_num` FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );", iUniqueID );
new Handle:hQueryNumTalisman = SQL_PrepareQuery(g_DBConn, szQueryNumTalisman );
if ( !SQL_Execute( hQueryNumTalisman ) )
{
SQLITE_Error(hQueryNumTalisman, szQueryNumTalisman, 100 );
return;
}
new iNumTalismansUser = 0;
// Цикл считывания из поля 'talisman_num'
while ( SQL_MoreResults( hQueryNumTalisman ) )
{
iNumTalismansUser = SQL_ReadResult( hQueryNumTalisman, 0 );
SQL_NextRow( hQueryNumTalisman );
}
SQL_FreeHandle( hQueryNumTalisman );
//Если у игрока талисманов максимальное количество не нужно считывать из базы чтобы снизить нагрузку
if(iNumTalismansUser == MAX_TALISMANS)
{
arrTalismanNum[idUser] = iNumTalismansUser;
return;
}
//Запрос всех талисманов для игрока
new szQuery[256];
format(szQuery, charsmax(szQuery), "SELECT `talisman_id` FROM `cssb_player_talisman` WHERE (`player_id` = '%d' );", iUniqueID );
new Handle:query = SQL_PrepareQuery( g_DBConn, szQuery );
if ( !SQL_Execute( query ) )
{
SQLITE_Error( query, szQuery, 101 );
return;
}
// Обнуляем все талисманы
for ( new i = 0; i < MAX_TALISMANS; i++ )
arrListTalisman[idUser][i] = TALISMAN_ITEM_NONE;
new iTalismanID,iCounter = 0;
// Цикл считывания из поля 'talisman_id'
while ( SQL_MoreResults( query ) )
{
iTalismanID = SQL_ReadResult( query, 0 );
if ( iCounter < MAX_TALISMANS )
{
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(LIST_TALISMANS[i] == iTalismanID)
{
arrListTalisman[idUser][i] = LIST_TALISMANS[i];
arrTalismanNum[idUser]++;
break;
}
}
}
SQL_NextRow( query );
iCounter++;
}
SQL_FreeHandle( query );
// client_print(0,print_chat,"TalismanID SQLITE_GetAllTalisman");
return;
}
fTalisman_SQLITE_Save( idUser,iUniqueID )//добавлена в db_sqlite.inl (SQLITE_Save( idUser ))
{
// client_print(0,print_chat,"TalismanID SQLITE_Save:");
// log_amx("TalismanID fTalisman_SQLITE_Save");
//Удаление записи по ID игрока
new szQueryDeleteTalisman[256];
format(szQueryDeleteTalisman, charsmax(szQueryDeleteTalisman), "DELETE FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );",iUniqueID);
new Handle:hQueryDeleteTalisman = SQL_PrepareQuery(g_DBConn, szQueryDeleteTalisman );
if ( !SQL_Execute( hQueryDeleteTalisman ) )
{
SQLITE_Error(hQueryDeleteTalisman, szQueryDeleteTalisman, 104 );
return;
}
//SQL_FreeHandle( hQueryDeleteTalisman );
//Сохранение количества талисманов игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "REPLACE INTO `cssb_num_talisman` ( `player_id` , `talisman_num`) VALUES ( '%d', '%d' );", iUniqueID, arrTalismanNum[idUser]);
new Handle:hQueryNumTalisman = SQL_PrepareQuery(g_DBConn, szQueryNumTalisman );
if ( !SQL_Execute( hQueryNumTalisman ) )
{
SQLITE_Error(hQueryNumTalisman, szQueryNumTalisman, 102 );
return;
}
// SQL_FreeHandle( hQueryNumTalisman );
//Если у игрока талисманов максимальное количество не нужно записывать в базу все талисманы чтобы снизить нагрузку
if(arrTalismanNum[idUser] >= MAX_TALISMANS)
return;
//Сохранение всех талисманов
for ( new iTalismanID = 0; iTalismanID < MAX_TALISMANS; iTalismanID++ )
{
if(arrListTalisman[idUser][iTalismanID] == TALISMAN_ITEM_NONE)
continue;
new iTalismanValue = arrListTalisman[idUser][iTalismanID];
new szQuery[512];
format( szQuery, charsmax(szQuery), "REPLACE INTO `cssb_player_talisman` ( `player_id` , `talisman_id`) VALUES ( '%d', '%d' );", iUniqueID, iTalismanValue);
new Handle:query = SQL_PrepareQuery( g_DBConn, szQuery );
if ( !SQL_Execute( query ) )
{
SQLITE_Error( query, szQuery, 103 );
return;
}
// SQL_FreeHandle( query );
}
}
fTalisman_SQLITE_Save_T(idUser,iUniqueID )//добавлена в db_sqlite.inl (SQLITE_Save_T( idUser ))
{
// client_print(0,print_chat,"TalismanID SQLITE_Save_T:");
// log_amx("TalismanID SQLITE_Save_T");
//Удаление записи по ID игрока
new szQueryDeleteTalisman[256];
format(szQueryDeleteTalisman, charsmax(szQueryDeleteTalisman), "DELETE FROM `cssb_num_talisman` WHERE (`player_id` = '%d' );",iUniqueID);
SQL_ThreadQuery(g_DBTuple,"_SQLITE_Save_T", szQueryDeleteTalisman );
//Сохранение количества талисманов игрока
new szQueryNumTalisman[256];
format(szQueryNumTalisman, charsmax(szQueryNumTalisman), "REPLACE INTO `cssb_num_talisman` ( `player_id` , `talisman_num`) VALUES ( '%d', '%d' );", iUniqueID, arrTalismanNum[idUser]);
SQL_ThreadQuery(g_DBTuple,"_SQLITE_Save_T", szQueryNumTalisman );
//Если у игрока талисманов максимальное количество не нужно записывать в базу все талисманы, чтобы снизить нагрузку
if(arrTalismanNum[idUser] >= MAX_TALISMANS)
return;
//Сохранение всех талисманов
for ( new iTalismanID = 0; iTalismanID < MAX_TALISMANS; iTalismanID++ )
{
if(arrListTalisman[idUser][iTalismanID] == TALISMAN_ITEM_NONE)
continue;
new iTalismanValue = arrListTalisman[idUser][iTalismanID];
new szQuery[512];
format(szQuery,charsmax(szQuery), "REPLACE INTO `cssb_player_talisman` ( `player_id` , `talisman_id`) VALUES ( '%d', '%d' );", iUniqueID, iTalismanValue);
SQL_ThreadQuery( g_DBTuple, "_SQLITE_Save_T", szQuery );
}
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции баз данных MYSQL и SQLITE-------------------------------------END }
//-----------------Функции талисмана как пассивного навыка------------------------------------BEGIN {
public fActivateTalismanPassive(idUser, idTalismanActive)//добавлена [items.inl - ITEM_GiveAllBonuses( idUser )]
{
switch(idTalismanActive)
{
case TALISMAN_ITEM_BOOTS: // Boots of Speed
{
SHARED_SetSpeed( idUser );
}
case TALISMAN_ITEM_CLOAK: // Cloak of Shadows
{
SHARED_INVIS_Set(idUser);
}
case TALISMAN_ITEM_HEALTH: // Periapt of Health
{
new iMaxHealth = clHP:getRaceMaxHealth(idUser);
new iCurrentHealth = clHP:getUserHealth(idUser);
new iBonusHp = get_pcvar_num(CVAR_wc3_health);
if((iCurrentHealth + iBonusHp) > iMaxHealth)
clHP:setUserHealth(idUser,iMaxHealth);
else
clHP:setUserHealth(idUser,iCurrentHealth + iBonusHp);
}
case TALISMAN_ITEM_SOCK: // Sock of the Feather
{
SHARED_SetGravity(idUser);
}
case TALISMAN_ITEM_GLOVES: // Flaming Gloves of Warmth
{
ITEM_Gloves( idUser );
}
case TALISMAN_ITEM_RING: // Ring of Regeneration
{
if ( !task_exists( TASK_ITEM_RING + idUser ) )
{
_ITEM_Ring( idUser );
}
}
case TALISMAN_ITEM_CHAMELEON: // Chameleon
{
SHARED_ChangeSkin( idUser, SKIN_SWITCH );
}
case TALISMAN_ITEM_ESP: // ESP
{
fEnableItemESP(idUser);
}
case TALISMAN_ITEM_ICE_BLOCK: //Ледяная глыба [shopmenu4.inl - sm4_ITEM_IceBlock_Begin(idUser)]
{
ITEM_IceBlock( idUser );
}
case TALISMAN_ITEM_THIEF: //Похититель денег [shopmenu4.inl - ITEM_Thief_Begin(idUser)]
{
ITEM_Thief( idUser );
}
}
}
stock fWorkTalismanPassive(idUser, idTalismanActive)
{
switch(idTalismanActive)
{
case TALISMAN_ITEM_ANKH: // Ankh of Reincarnation [shared.inl - public SHARED_CS_Reincarnation( idUser )]
{
return TALISMAN_ITEM_ANKH;
}
case TALISMAN_ITEM_BOOTS: // Boots of Speed [shared.inl - public SHARED_SetSpeed( idUser )]
{
return TALISMAN_ITEM_BOOTS;
}
case TALISMAN_ITEM_CLAWS: // Claws of Attack [items.inl - ITEM_Offensive( idAttacker, idVictim, iWeapon, iDamage, iHitPlace )]
{
return TALISMAN_ITEM_CLAWS;
}
case TALISMAN_ITEM_CLOAK: // Cloak of Shadows [shared.inl - public SHARED_INVIS_Set( idUser )]
{
return TALISMAN_ITEM_CLOAK;
}
case TALISMAN_ITEM_MASK: // Mask of Death [items.inl - ITEM_Offensive( idAttacker, idVictim, iWeapon, iDamage, iHitPlace )]
{
return TALISMAN_ITEM_MASK;
}
case TALISMAN_ITEM_NECKLACE: // Necklace of Immunity [ultimates.inl - bool:ULT_CanUserBlockUlt( idUser )]
{
return TALISMAN_ITEM_NECKLACE;
}
case TALISMAN_ITEM_FROST: // Orb of Frost [items.inl - ITEM_Offensive( idAttacker, idVictim, iWeapon, iDamage, iHitPlace )]
{
return TALISMAN_ITEM_FROST;
}
case TALISMAN_ITEM_HEALTH:
{
return TALISMAN_ITEM_HEALTH;
}
case TALISMAN_ITEM_PROTECTANT: // Mole Protectant [events.inl - public TRIGGER_TraceLine( Float:v1[3], Float:v2[3], noMonsters, pentToSkip )]
{
return TALISMAN_ITEM_PROTECTANT;
}
case TALISMAN_ITEM_HELM: // Helm of Excellence [events.inl - public TRIGGER_TraceLine( Float:v1[3], Float:v2[3], noMonsters, pentToSkip )]
{
if(ITEM_HasItem( idUser, ITEM_HELM ) != ITEM_HELM)
return TALISMAN_ITEM_HELM;
}
case TALISMAN_ITEM_AMULET: // Amulet of the Cat [cssbWar3ftMod.sma - public client_PreThink( id )]
{
if(ITEM_HasItem( idUser, ITEM_AMULET ) != ITEM_AMULET)
return TALISMAN_ITEM_AMULET;
}
case TALISMAN_ITEM_SOCK: // Sock of the Feather [shared.inl - public SHARED_SetGravity( idUser )]
{
return TALISMAN_ITEM_SOCK;
}
case TALISMAN_ITEM_GLOVES: // Flaming Gloves of Warmth [events.inl - public grenade_throw( idUser, greindex, wId )]
{
if(ITEM_HasItem( idUser, ITEM_GLOVES ) != ITEM_GLOVES)
return TALISMAN_ITEM_GLOVES;
}
case TALISMAN_ITEM_RING: // Ring of Regeneration + 1 [items.inl - public _ITEM_Ring( idUser )]
{
if(ITEM_HasItem( idUser, ITEM_RING ) != ITEM_RING)
return TALISMAN_ITEM_RING;
}
case TALISMAN_ITEM_CHAMELEON: // Chameleon [race_vip_models.inl - public fwPlayerPostThink(idUser)]
{
if(ITEM_HasItem( idUser, ITEM_CHAMELEON ) != ITEM_CHAMELEON)
return TALISMAN_ITEM_CHAMELEON;
}
case TALISMAN_ITEM_INTELLECT: // Intellect [XP.inl - stock XP_Give( idUser, iBonusXP )]
{
if(ITEM_HasItem( idUser, ITEM_INTELLECT ) != ITEM_INTELLECT)
return TALISMAN_ITEM_INTELLECT;
}
case TALISMAN_ITEM_GRENADE_PROTECTION: // Grenade Protection [events.inl - public EVENT_TakeDamage( idVictim, iWeapon, idAttacker, Float:f_Damage, damagetype )]
{
if(ITEM_HasItem( idUser, ITEM_GRENADE_PROTECTION ) != ITEM_GRENADE_PROTECTION)
return TALISMAN_ITEM_GRENADE_PROTECTION;
}
case TALISMAN_ITEM_MIRROR_SHIELD: // Mirror Shield [events.inl - public client_damage( idAttacker, idVictim, iDamage, iWeapon, iHitPlace, TA )]
{
if(ITEM_HasItem( idUser, ITEM_MIRROR_SHIELD ) != ITEM_MIRROR_SHIELD)
return TALISMAN_ITEM_MIRROR_SHIELD;
}
case TALISMAN_ITEM_ESP: // ESP
{
if(ITEM_HasItem( idUser, ITEM_ESP ) != ITEM_ESP)
return TALISMAN_ITEM_ESP;
}
case TALISMAN_ITEM_FROST_ARMOR: // Frost Armor [events.inl - public client_damage( idAttacker, idVictim, iDamage, iWeapon, iHitPlace, TA )]
{
if(ITEM_HasItem( idUser, ITEM_FROST_ARMOR ) != ITEM_FROST_ARMOR)
return TALISMAN_ITEM_FROST_ARMOR;
}
case TALISMAN_ITEM_ULTIMATE_TIMER_DIVIDER: // Ultimate Timer Divider [ultimates.inl - public _ULT_Delay()]
{
if(ITEM_HasItem( idUser, ITEM_ULTIMATE_TIMER_DIVIDER ) != ITEM_ULTIMATE_TIMER_DIVIDER)
return TALISMAN_ITEM_ULTIMATE_TIMER_DIVIDER;
}
case TALISMAN_ITEM_DEVOURER_LIGHT: //Пожиратель змей [race_shadow.inl - public _SH_DrawSerpentWard( parm[5] )]
{
if(ITEM_HasItem( idUser, ITEM_DEVOURER_LIGHT ) != ITEM_DEVOURER_LIGHT)
return TALISMAN_ITEM_DEVOURER_LIGHT;
}
case TALISMAN_ITEM_ICE_BLOCK: //Ледяная глыба [shopmenu4.inl - sm4_ITEM_IceBlock_Begin(idUser)]
// [item_ice_block.inl - public fwSetModel(idEntity,szModel[]) и show_icon(idUser, status)]
{
if(ITEM_HasItem( idUser, ITEM_ICE_BLOCK ) != ITEM_ICE_BLOCK)
return TALISMAN_ITEM_ICE_BLOCK;
}
case TALISMAN_ITEM_THIEF: //Похититель денег [shopmenu4.inl - ITEM_Thief_Begin(idUser)]
{
if(ITEM_HasItem( idUser, ITEM_THIEF ) != ITEM_THIEF)
return TALISMAN_ITEM_THIEF;
}
case TALISMAN_ITEM_MIRROR_ULTIMATE: //Отражатель супер навыка [events.inl - public TRIGGER_TraceLine( Float:v1[3], Float:v2[3], noMonsters, pentToSkip )]
{ // (не добавлять)[race_crypt.inl - CL_ULT_LocustSwarm( idAttacker )]
if (random_float(0.0, 1.0 ) <= 0.75 )
{
if(ITEM_HasItem( idUser, ITEM_MIRROR_ULTIMATE ) != ITEM_MIRROR_ULTIMATE)
return TALISMAN_ITEM_MIRROR_ULTIMATE;
}
}
}
return TALISMAN_ITEM_NONE;
}
//Какой талисман является активным у игрока
//добавлена [shared.inl - SHARED_Glow( idUser, iRed, iGreen, iBlue, iAll ),
// SHARED_GlowShell(idUser, iRed, iGreen, iBlue,Float:fTime,iAmountGlow = 16)]
bool:bIsActiveTalisman(idUser,idTalisman)
{
if(arrTalismanActive[idUser] == idTalisman)
return true;
return false;
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции талисмана как пассивного навыка-------------------------------------END }
//-----------------Функции отображения Sync HUD------------------------------------BEGIN {
public fShowSyncMessageRandomColor(idUser,szHUDMessage[],iMessageEffect,Float:fX,Float:fY)
{
new rgbRed, rgbGreen, rgbBlue;
rgbRed = random_num(0, 255);
rgbGreen = random_num(0, 255);
rgbBlue = random_num(0, 255);
new iEffect, Float:iFadeIn, Float:iFadeOut, Float:iHoldTime;
switch(iMessageEffect)
{
case 1:
{
iEffect = 1;
iFadeIn = 0.2;
iFadeOut = 0.2;
iHoldTime = 7.0;
}
case 2:
{
iEffect = 2;
iFadeIn = 0.05;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
default:
{
iEffect = 0;
iFadeIn = 0.5;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
}
set_hudmessage(rgbRed, rgbGreen, rgbBlue,fX,fY, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, 3);
ShowSyncHudMsg(idUser, stSyncHudCreate ,"%s", szHUDMessage);
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции отображения Sync HUD-------------------------------------END }
//-----------------Функции администратора-------------------------------------BEGIN {
// Give the user an talisman
ADMIN_GiveTalisman( idUser, szTarget[], iItemID )//добавлена в admin.inl (public ADMIN_Handler( idUser ))
{
/* if(!(get_user_flags(idUser) & ADMIN_FLAG))
{
formatex(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"YOU_HAVE_NO_ACCESS");
client_print( idUser, print_console,szMessage);
return;
}*/
new szItemName[64];
LANG_GetItemName ( iItemID, idUser, szItemName, 63 );
new iTarget = 0, bool:bTargetFound = false;
//Дать все талисманы
if(iItemID == 999)
{
while ( ( iTarget = FindTarget( iTarget, szTarget ) ) > 0 )
{
ADMIN_Talisman_Buy_All(iTarget);
bTargetFound = true;
}
if ( !bTargetFound )
ADMIN_NoTargetFound( idUser, szTarget, ( iTarget == -2 ) );
return;
}
//Дать один талисман
while ( ( iTarget = FindTarget( iTarget, szTarget ) ) > 0 )
{
ADMIN_Talisman_Buy( iTarget, iItemID );
bTargetFound = true;
}
if ( !bTargetFound )
{
ADMIN_NoTargetFound( idUser, szTarget, ( iTarget == -2 ) );
}
}
public ADMIN_Talisman_Buy( idUser, iTalismanValue )
{
if(!bIsPlayerPresenceTalisman(idUser,iTalismanValue))//Если нет в наличии талисмана
{
for(new i = 0; i < MAX_TALISMANS; i++)
{
if(LIST_TALISMANS[i] == iTalismanValue)
{
arrListTalisman[idUser][i] = iTalismanValue;
arrTalismanNum[idUser]++;
fShowMenuTalismans(idUser);
break;
}
}
}
}
public ADMIN_Talisman_Buy_All( idUser )
{
for(new i = 0; i < MAX_TALISMANS; i++)
arrListTalisman[idUser][i] = LIST_TALISMANS[i];
arrTalismanNum[idUser] = MAX_TALISMANS;
fShowMenuTalismans(idUser);
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции администратора-------------------------------------END }
//-----------------Функции логов-------------------------------------BEGIN {
//Лог появления талисмана для проверки что все работает
fTalismanLog(ptX,ptY,ptZ)
{
new szLogFile[128];
get_configsdir( szLogFile, charsmax(szLogFile) );
formatex( szLogFile, charsmax(szLogFile), "%s/war3ft/logs/wc3_talisman.log", szLogFile );
if (!file_exists( szLogFile ) )
{
write_file( szLogFile, "CSSB Warcraft 3 Frozen Throne Private", -1 );
write_file( szLogFile, "Logging of respawn talismans", -1 );
write_file( szLogFile, " ", -1 );
}
new szCvarNetAddress[64];
get_cvar_string("net_address",szCvarNetAddress,charsmax(szCvarNetAddress) );
new szCvarIP[64];
get_cvar_string("ip",szCvarIP,charsmax(szCvarIP) );
new szMap[32];
get_mapname(szMap, charsmax(szMap));
new szCurrentTime[64];
get_time( "L %m/%d/%Y - %H:%M:%S", szCurrentTime,charsmax(szCurrentTime));
new szLogEntry[256];
formatex(szLogEntry, 255, "%s Spawn: ^"<%d><%d><%d>^" Map: ^"<%s>^" IP: ^"<%s><%s>^" ", szCurrentTime,ptX,ptY,ptZ,szMap,szCvarNetAddress,szCvarIP);
write_file( szLogFile, szLogEntry, -1 );
}
//Лог кто из игроков подобрал талисман
fTalismanPlayerPickUpLog(idUserPickUp,szItemName[])
{
new szLogFile[128];
get_configsdir( szLogFile, charsmax(szLogFile) );
formatex( szLogFile, charsmax(szLogFile), "%s/war3ft/logs/wc3_talisman_pickup.log", szLogFile );
if (!file_exists( szLogFile ) )
{
write_file( szLogFile, "CSSB Warcraft 3 Frozen Throne Private", -1 );
write_file( szLogFile, "Logging of pick up player talismans", -1 );
write_file( szLogFile, " ", -1 );
}
new szUserIP[32], szUserAuthid[32],szUserName[32];
get_user_ip(idUserPickUp, szUserIP, charsmax(szUserIP), 1);
get_user_authid(idUserPickUp, szUserAuthid, charsmax(szUserAuthid));
get_user_name(idUserPickUp, szUserName, charsmax(szUserName));
new szMap[32];
get_mapname(szMap, charsmax(szMap));
new szCurrentTime[64];
get_time( "L %m/%d/%Y - %H:%M:%S", szCurrentTime,charsmax(szCurrentTime));
new szLogEntry[256];
formatex(szLogEntry, 255, "%s Name: ^"<%s>^" StemID: ^"<%s>^" IP: ^"<%s>^" Map: ^"<%s>^" Talisman: ^"<%s>^" ", szCurrentTime,szUserName,szUserAuthid,szUserIP,szMap,szItemName);
write_file( szLogFile, szLogEntry, -1 );
}
//=============================================================================
//=============================================================================
//=============================================================================
//-----------------Функции логов-------------------------------------END }
Код:
/*
* UTIL Functions - Basically helper functions
*/
//Автоматическое (принудительное) закрытие меню игроку
UTIL_AutoHideMenu(idUser)
{
new idMenuAutoHide, iKeysAutoHide;
get_user_menu (idUser, idMenuAutoHide, iKeysAutoHide);
if(idMenuAutoHide != 0 )
{
menu_cancel(idUser); // force client to choose MENU_EXIT to destroy our menu
show_menu(idUser, 0, "^n", 1 ); // show empty menu to hide our menu on player's screen
}
}
UTIL_GetWeaponName( iWeapon, szWpnName[], len )
{
switch ( iWeapon )
{
case CSW_KNIFE: copy( szWpnName, len, "knife" );
case CSW_USP: copy( szWpnName, len, "usp" );
case CSW_GLOCK18: copy( szWpnName, len, "glock18" );
case CSW_DEAGLE: copy( szWpnName, len, "deagle" );
case CSW_P228: copy( szWpnName, len, "p228" );
case CSW_ELITE: copy( szWpnName, len, "elite" );
case CSW_FIVESEVEN: copy( szWpnName, len, "fiveseven" );
case CSW_M3: copy( szWpnName, len, "m3" );
case CSW_XM1014: copy( szWpnName, len, "xm1014" );
case CSW_MP5NAVY: copy( szWpnName, len, "mp5navy" );
case CSW_TMP: copy( szWpnName, len, "tmp" );
case CSW_P90: copy( szWpnName, len, "p90" );
case CSW_MAC10: copy( szWpnName, len, "mac10" );
case CSW_UMP45: copy( szWpnName, len, "ump45" );
case CSW_AK47: copy( szWpnName, len, "ak47" );
case CSW_SG552: copy( szWpnName, len, "sg552" );
case CSW_M4A1: copy( szWpnName, len, "m4a1" );
case CSW_AUG: copy( szWpnName, len, "aug" );
case CSW_SCOUT: copy( szWpnName, len, "scout" );
case CSW_AWP: copy( szWpnName, len, "awp" );
case CSW_SG550: copy( szWpnName, len, "sg550" );
case CSW_G3SG1: copy( szWpnName, len, "g3sg1" );
case CSW_GALI: copy( szWpnName, len, "galil" );
case CSW_FAMAS: copy( szWpnName, len, "famas" );
case CSW_M249: copy( szWpnName, len, "m249" );
case CSW_HEGRENADE: copy( szWpnName, len, "grenade" );
}
// These are common to both
switch ( iWeapon )
{
case CSW_WORLDSPAWN: copy( szWpnName, len, "world" );
case CSW_LIGHTNING: copy( szWpnName, len,"Chain Lightning");
case CSW_SUICIDE: copy( szWpnName, len,"Suicide Bomber");
case CSW_IMMOLATE: copy( szWpnName, len,"Immolate");
case CSW_LOCUSTS: copy( szWpnName, len,"Locust Swarm");
case CSW_SERPENTWARD: copy( szWpnName, len,"Serpent Ward");
case CSW_SHADOW: copy( szWpnName, len,"Shadow Strike");
case CSW_THORNS: copy( szWpnName, len,"Thorns Aura");
case CSW_CARAPACE: copy( szWpnName, len,"Spiked Carapace");
case CSW_CARRION: copy( szWpnName, len,"Carrion Beetles");
case CSW_ORB: copy( szWpnName, len,"Orb of Annihilation");
case CSW_CONCOCTION: copy( szWpnName, len,"Unstable Concoction");
case CSW_BANISH: copy( szWpnName, len,"Banish");
case CSW_BLIZZARD: copy( szWpnName, len,"Blizzard");
case CSW_ICE_SPLINTERS: copy( szWpnName, len,"Ice splinters");
case CSW_CHAM_FLAME_STRIKE: copy( szWpnName, len,"Flame Strike");
case CSW_DEATHCOIL: copy( szWpnName, len,"Death Coil");
case CSW_IMPALE: copy( szWpnName, len,"Impale");
case CSW_BLACKPOWER: copy( szWpnName, len,"Black Strike");
case CSW_POISON: copy( szWpnName, len,"Poison");
case CSW_RADIATION: copy(szWpnName, len,"Radiation");
case CSW_WORDDEATH: copy(szWpnName, len,"Darkness word: Death");
case CSW_BLOOD_RAGE: copy(szWpnName, len,"Blood Rage");
case CSW_BLOOD_RITE: copy(szWpnName, len,"Blood Rite");
case CSW_HEADSHOT: copy(szWpnName, len,"Headshot");
case CSW_SHRAPNEL: copy(szWpnName, len,"Shrapnel");
case CSW_GLIMPSE: copy(szWpnName, len,"Glimpse");
case CSW_STATIC_STORM: copy(szWpnName, len,"Static Storm");
case CSW_THUNDER_STRIKE: copy(szWpnName, len,"Thunder Strike");
case CSW_PLASMA_FIELD: copy(szWpnName, len,"Plasma Field");
case CSW_UNSTABLE_CURRENT: copy(szWpnName, len,"Unstable Current");
case CSW_FATAL_BONDS: copy(szWpnName, len,"Fatal Bonds");
case CSW_SHADOW_WORD: copy(szWpnName, len,"Shadow Word");
case CSW_FLAMING_FISTS: copy(szWpnName, len,"Flaming Fists");
case CSW_PERM_IMMOLATION: copy(szWpnName, len,"Permanent Immolation");
case CSW_CRY_HEART: copy(szWpnName, len,"Cry from the heart");
case CSW_REQUIEM_SOULS: copy(szWpnName, len,"Requiem of Souls");
}
}
// Log the death of a user
UTIL_LogDeath( idVictim, iKiller, iWeapon )
{
new szKillerName[32], szVictimName[32];
new szKillerTeam[32], szVictimTeam[32];
new szKillerAuth[32], szVictimAuth[32];
new szWeaponName[32];
new iKillerUserID = get_user_userid( iKiller );
new iVictimUserID = get_user_userid( idVictim );
UTIL_GetWeaponName( iWeapon, szWeaponName, 31 );
get_user_name( iKiller , szKillerName , 31 );
get_user_name( idVictim , szVictimName , 31 );
get_user_team( iKiller , szKillerTeam , 31 );
get_user_team( idVictim , szVictimTeam , 31 );
get_user_authid( iKiller , szKillerAuth , 31 );
get_user_authid( idVictim , szVictimAuth , 31 );
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"", szKillerName, iKillerUserID, szKillerAuth, szKillerTeam, szVictimName, iVictimUserID, szVictimAuth, szVictimTeam, szWeaponName );
}
stock UTIL_EntInView(idUser, iEnt)
{
new Float:vPlayerOrigin[3];
entity_get_vector( idUser, EV_VEC_origin, vPlayerOrigin );
new Float:vEntOrigin[3];
entity_get_vector( iEnt, EV_VEC_origin, vEntOrigin );
new Float:vReturn[3];
new iHitEnt = trace_line( idUser, vPlayerOrigin, vEntOrigin, vReturn );
if ( iHitEnt == iEnt )
{
return 1;
}
return 0;
}
UTIL_ClearHudChannel( idUser, iChannel )
{
set_hudmessage( 0, 0, 0, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0, iChannel );
show_hudmessage( idUser, "" );
}
stock UTIL_ClearDHudChannel(idUser,iClear = 8) //под вопросом (толку пока не видно)
{
for (new iDHUD = 0; iDHUD < iClear; iDHUD++)
{
set_dhudmessage(0, 0, 0, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0, -1 );
show_dhudmessage(idUser, "");
}
}
//Когда один игрок смотрит на другого
stock UTIL_CanSeePlayer(idUser, iTargetID)
{
if(!is_user_alive(idUser) || !is_user_connected(idUser))
return 0;
if(!is_user_alive(iTargetID) || !is_user_connected(iTargetID))
return 0;
new Float:vOrigin[3];
entity_get_vector(iTargetID, EV_VEC_origin, vOrigin );
return is_in_viewcone(idUser, vOrigin);
}
//Проверяет видит ли игрок другого с учетом стен
stock bool:UTIL_CanSeeToWall(entindex1, entindex2)
{
if ((!iFakeMeta_ModuleRunning) || !entindex1 || !entindex2)
return false;
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags);
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return false;
}
new Float:lookerOrig[3];
new Float:targetBaseOrig[3];
new Float:targetOrig[3];
new Float:temp[3];
pev(entindex1, pev_origin, lookerOrig);
pev(entindex1, pev_view_ofs, temp);
lookerOrig[0] += temp[0];
lookerOrig[1] += temp[1];
lookerOrig[2] += temp[2];
pev(entindex2, pev_origin, targetBaseOrig);
pev(entindex2, pev_view_ofs, temp);
targetOrig[0] = targetBaseOrig [0] + temp[0];
targetOrig[1] = targetBaseOrig [1] + temp[1];
targetOrig[2] = targetBaseOrig [2] + temp[2];
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the had of seen player
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return false;
}
else
{
new Float:flFraction;
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
else
{
targetOrig[0] = targetBaseOrig [0];
targetOrig[1] = targetBaseOrig [1];
targetOrig[2] = targetBaseOrig [2];
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the body of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
else
{
targetOrig[0] = targetBaseOrig [0];
targetOrig[1] = targetBaseOrig [1];
targetOrig[2] = targetBaseOrig [2] - 17.0;
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the legs of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
}
}
}
}
return false;
}
//Считывает координаты игрока как float и переводит в int
stock UTIL_GetOriginInt(idUser, ptOrigin[3])
{
new Float:fVector[3];
pev(idUser,pev_origin,fVector);
ptOrigin[0] = floatround(fVector[0]);
ptOrigin[1] = floatround(fVector[1]);
ptOrigin[2] = floatround(fVector[2]);
}
//Входящее значение - точка с плавающей запятой т.е. Float
//Возвращаемое значение - точка с плавающей запятой т.е. Float
stock Float:uFloatPointToFloat(Float:ptAux[3])
{
new Float:pt[3];
pt[0] = ptAux[0];
pt[1] = ptAux[1];
pt[2] = ptAux[2];
return pt;
}
//Входящее значение - точка с плавающей запятой т.е. Float
//Возвращаемое значение - точка с целыми т.е. int
stock uFloatPointToInt(Float:ptAux[3])
{
new pt[3];
pt[0] = floatround(ptAux[0]);
pt[1] = floatround(ptAux[1]);
pt[2] = floatround(ptAux[2]);
return pt;
}
//Поворот точки (вектора) на заданный угол и радиус
//Входящее значение - точка с плавающей запятой т.е. Float
stock Float:uPointRotate(Float:fRadiusAux,Float:fAngleAux,Float:ptAux[3])
{
new Float:pt[3];
pt[0] = ptAux[0];
pt[1] = ptAux[1];
pt[2] = ptAux[2];
pt[0] += fRadiusAux*cos(fAngleAux*M_PI/180);
pt[1] += -fRadiusAux*sin(fAngleAux*M_PI/180);
return pt;
}
//Поворот точки (вектора) на заданный угол и радиус
//Входящее значение - точка с плавающей запятой т.е. Float
//Рабочий механизм,поворачивает куда надо )))
stock Float:uRotate(Float:fAngleAux,Float:ptAux[3])
{
//Работает в радианах
new Float:ptRotated[3];
ptRotated[2] = ptAux[2];
ptRotated[0] = ptAux[0] * cos(fAngleAux) - ptAux[1] * sin(fAngleAux);
ptRotated[1] = ptAux[0] * sin(fAngleAux) + ptAux[1] * cos(fAngleAux);
return ptRotated;
}
//Удаление всех сущностей по названию класса со всей карты
stock uDeleteAllEntClassnameMap(const szClassNameEnt[])
{
new idEntity;
while ((idEntity = engfunc(EngFunc_FindEntityByString, idEntity, "classname",szClassNameEnt) ))
{
if (!pev_valid(idEntity))
return;
engfunc(EngFunc_RemoveEntity, idEntity);
}
}
//Удаление всех сущностей по названию класса принадлежащие игроку
stock uDeleteAllEntClassnameUser(const szClassNameEnt[], const idUser)
{
new idEntity;
while ((idEntity = engfunc(EngFunc_FindEntityByString, idEntity, "classname",szClassNameEnt) ))
{
if (!pev_valid(idEntity))
return;
new idOwner = pev(idEntity, pev_owner);
if(idUser == idOwner)
engfunc(EngFunc_RemoveEntity, idEntity);
// cssbChatColor(0,"uDeleteAllEntClassnameUser: %d",idEntity);
}
}
//Поиск сущности по классу принадлежащую игроку. (возвращает первую попавшуюся)
stock isEntUserOwner(const szClassNameEnt[], const idUser)
{
new idEntity;
while ((idEntity = engfunc(EngFunc_FindEntityByString, idEntity, "classname",szClassNameEnt) ))
{
if (!pev_valid(idEntity))
return false;
new idOwner = pev(idEntity, pev_owner);
if(idUser == idOwner)
return true;
// cssbChatColor(0,"uDeleteAllEntClassnameUser: %d",idEntity);
}
return false;
}
/*
Актуальность данной функции заключается в том, что если не выполнить проверку чем является точка куда перемещаем игрока,
то он может оказаться в стене, полу или в другом игроке, что не даст возможность продолжать играть.
Функция uIsHullVacant вернет результат проверки что вокруг проверяемой
точки достаточно места для того что бы туда переместить игрока.
#define HULL_POINT 0
#define HULL_HUMAN 1
#define HULL_LARGE 2
#define HULL_HEAD
*/
stock bool:uIsHullVacant(const Float:origin[3], hull)
{
new tr = 0;
engfunc(EngFunc_TraceHull, origin, origin, 0, hull, 0, tr);
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true;
return false;
}
//Возвращает точку до стены от игрока
stock uGetPointTraceWall(idUser, Float:ptOriginWall[3])
{
new Float:ptOriginPlayer[3];
new Float:vViewOfs[3];
new Float:fPunchAngle[3];
pev(idUser, pev_origin, ptOriginPlayer); // Координата игрока
pev(idUser, pev_view_ofs, vViewOfs); // Получить смещение глаз игрока
xs_vec_add(ptOriginPlayer, vViewOfs, ptOriginPlayer); // Складываем смещение глаз и координаты игрока - получаем координаты его глаз
pev(idUser, pev_v_angle, ptOriginWall); // Получаем угол куда смотрит игрок
pev(idUser, pev_punchangle, fPunchAngle); // Это так сказать "искажение" угла взора игрока
xs_vec_add(ptOriginWall, fPunchAngle, ptOriginWall); // Складываем и получаем настоящий угол
engfunc(EngFunc_MakeVectors, ptOriginWall); // Делаем из угла единичный вектор
global_get(glb_v_forward, ptOriginWall); // Получаем этот вектор
xs_vec_mul_scalar(ptOriginWall, 4048.0, ptOriginWall); // Умножаем его
xs_vec_add(ptOriginWall, ptOriginPlayer, ptOriginWall); // Прибавляем к координатам игрока, чтобы получить вектор от координат игрока, направленный по его взору
new tr;
engfunc(EngFunc_TraceLine,ptOriginPlayer, ptOriginWall, 0, idUser, tr); // Трассируем линию от координат до конца вектора
get_tr2(tr, TR_vecEndPos, ptOriginWall); // Получаем конечную точку
free_tr2(tr);
}
Код:
/ ******************************************************************
// Глобальные функции настройки вип
// ******************************************************************
//Загрузка файла настройки
public clVIP:vfLoadVipSystemFile()//добавлена в war3ft.cpp ( public WC3_Precache() )
{
arrStrVipName = ArrayCreate(64, 1);
arrStrVipFlag = ArrayCreate(64, 1);
// arrStrVipDay = ArrayCreate(64, 1);
arrStrVipKeys = ArrayCreate(1024, 1);
new szPath[64];
get_configsdir(szPath, charsmax(szPath));
format(szPath, charsmax(szPath), "%s/%s", szPath, WAR3FT_VIP_SYSTEM_FILE);
// File not present
if (!file_exists(szPath))
{
new szError[100];
formatex(szError, charsmax(szError), "Cannot load war3ft vip system file %s!", szPath);
set_fail_state(szError);
return;
}
// Set up some vars to hold parsing info
new szLineData[1024], szKey[64], szValue[1024],iSection;
new szName[255], szFlag[255];//, szDay[255];
// Open customization file for reading
new hFileIni = fopen(szPath, "rt")
while (hFileIni && !feof(hFileIni))
{
// Read one line at a time
fgets(hFileIni, szLineData, charsmax(szLineData))
// Replace newlines with a null character to prevent headaches
replace(szLineData, charsmax(szLineData), "^n", "")
// Blank line or comment
if (!szLineData[0] || szLineData[0] == ';')
continue;
// Начало новой секции
if (szLineData[0] == '[')
{
iSection++
continue;
}
switch (iSection)
{
case SECTION_OPTIONS_VIP:
{
// Разделение строки по символу "="
strtok(szLineData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=')
// Удаление пробелов
trim(szKey);
trim(szValue);
if (equal(szKey, "HP_ARMOR_MIN_ROUND"))
iHpArmorMinRound = str_to_num(szValue);
else if (equal(szKey, "GREANADE_ALL_ROUND"))
iGreanadeAllRound = str_to_num(szValue);
else if (equal(szKey, "HEGRENADE_ROUND"))
iHegrenadeRound = str_to_num(szValue);
else if (equal(szKey, "FLASHBANG_ROUND"))
iFlashbangRound = str_to_num(szValue);
else if (equal(szKey, "SMOKEGRENADE_ROUND"))
iSmokegrenadeRound = str_to_num(szValue);
else if (equal(szKey, "RESPAWN_ROUND"))
iRespawnRound = str_to_num(szValue);
else if (equal(szKey, "SPEED_VALUE"))
fSpeedValueVip = str_to_float(szValue);
else if (equal(szKey, "GRAVITY_VALUE"))
fGravityValueVip = str_to_float(szValue);
else if (equal(szKey, "HP_ROUND"))
iHpRound = str_to_num(szValue);
else if (equal(szKey, "HP_VALUE"))
iHpValue = str_to_num(szValue);
else if (equal(szKey, "ARMOR_ROUND"))
iArmorRound = str_to_num(szValue);
else if (equal(szKey, "ARMOR_VALUE"))
iArmorValue = str_to_num(szValue);
else if (equal(szKey, "MONEY_ROUND"))
iMoneyRound = str_to_num(szValue);
else if (equal(szKey, "MONEY_VALUE"))
iMoneyValue = str_to_num(szValue);
else if (equal(szKey, "AWP_ROUND"))
iAwpRound = str_to_num(szValue);
else if (equal(szKey, "AK47_ROUND"))
iAk47Round = str_to_num(szValue);
else if (equal(szKey, "DEAGLE_ROUND"))
iDeagleRound = str_to_num(szValue);
else if (equal(szKey, "AUG_ROUND"))
iAugRound = str_to_num(szValue);
else if (equal(szKey, "SG552_ROUND"))
iSg552Round = str_to_num(szValue);
else if (equal(szKey, "M4A1_ROUND"))
iM4a1Round = str_to_num(szValue);
else if (equal(szKey, "M249_ROUND"))
iM249Round = str_to_num(szValue);
else if (equal(szKey, "M3_ROUND"))
iM3Round = str_to_num(szValue);
else if (equal(szKey, "XM1014_ROUND"))
iXm1014Round = str_to_num(szValue);
else if (equal(szKey, "ALL_WEAPONS_ROUND"))
iAllWeaponsRound = str_to_num(szValue);
else if (equal(szKey, "ALL_WEAPONS_BLOCK_MAP"))
copy(szAllWeaponsBlockMap, charsmax(szAllWeaponsBlockMap), szValue);
else if (equal(szKey, "DHUD_MESSSAGE"))
iDhudMesssageVip = str_to_num(szValue);
else if (equal(szKey, "CHAT_MESSSAGE"))
iChatMesssageVip = str_to_num(szValue);
}//case
case SECTION_USERS_VIP:
{
// Начало новой секции
if (szLineData[0] == '"')
{
// Разделение строки по символу "="
strtok(szLineData, szKey, charsmax(szKey), szValue, charsmax(szValue), '=');
// Удаление пробелов
trim(szKey);
trim(szValue);
ArrayPushString(arrStrVipKeys, szValue);
szName[0] = 0;
szFlag[0] = 0;
//szDay[0] = 0;
//parse(szKey,szName,charsmax(szName), szFlag,charsmax(szFlag),szDay,charsmax(szDay));
parse(szKey,szName,charsmax(szName), szFlag,charsmax(szFlag));
ArrayPushString(arrStrVipName, szName);
ArrayPushString(arrStrVipFlag, szFlag);
//ArrayPushString(arrStrVipDay, szDay);
//log_amx("Name: '%s' | Flag: '%s' | Day: '%s'",szName,szFlag,szDay);
//log_amx("Keys: '%s'",szValue);
}//if
}//case
}//switch
}
if (hFileIni)
fclose(hFileIni);
}
bool:clVIP:isMap()
{
new szValue[255];
copy(szValue, charsmax(szValue), szAllWeaponsBlockMap);
new szMap[64];
new szMapName[64];
get_mapname(szMapName, charsmax(szMapName));
while (szValue[0] != 0 && strtok(szValue, szMap, charsmax(szMap), szValue, charsmax(szValue), ','))
{
trim(szMap);
trim(szValue);
new iLength;
new szRestrictName[64];
iLength = copyc(szRestrictName, charsmax(szRestrictName), szMap, '*' );
if (equali(szMapName, szRestrictName, iLength))
{
//log_amx("Map: '%s' | szRestrictName: '%s'",szMapName,szRestrictName);
return true;
}
}
return false;
}
stock clVIP:isVipActiveIndex(const idUser)
{
new iVipIndex = -1;
for(new i = 0; i < ArraySize(arrStrVipName); i++)
{
new szUserAuthid[32],szUserName[32];
get_user_authid(idUser, szUserAuthid, charsmax(szUserAuthid));
get_user_name(idUser, szUserName, charsmax(szUserName));
new szAuthData[64];
ArrayGetString(arrStrVipName,i, szAuthData, charsmax(szAuthData));
new szFlags[64];
ArrayGetString(arrStrVipFlag,i, szFlags, charsmax(szFlags));
//new szDay[255];
//ArrayGetString(arrStrVipDay,i, szDay, charsmax(szDay));
new bitFlagVip = read_flags(szFlags);
if(equali(szAuthData,szUserAuthid) && (bitFlagVip & FLAG_AUTHID) )//Steam ID
{
arrBoolData[idUser][PB_VIP_ACCESS] = true;
iVipIndex = i;
break;
}
if(equali(szAuthData,szUserName) && (bitFlagVip & FLAG_KICK) )//Name
{
arrBoolData[idUser][PB_VIP_ACCESS] = true;
iVipIndex = i;
break;
}
}
return iVipIndex;
}
bool:clVIP:isAccesItemVip(const idUser,const idItem)
{
if(arrBoolData[idUser][PB_VIP_ACCESS] == true && arrIsItemVip[idUser][idItem] == true)
return true;
return false;
}
public clVIP:fInitItemsAccessVip(const idUser)
{
new iVipIndex = clVIP:isVipActiveIndex(idUser);
if(iVipIndex < 0)
return;
new szVipKeys[1024];
ArrayGetString(arrStrVipKeys,iVipIndex, szVipKeys, charsmax(szVipKeys));
new szKey[64];
while (szVipKeys[0] != 0 && strtok(szVipKeys, szKey, charsmax(szKey), szVipKeys, charsmax(szVipKeys), ','))
{
trim(szKey);
if (equal(szKey, "ANKH"))
{
arrIsItemVip[idUser][ITEM_ANKH] = true;
}
else if (equal(szKey, "MASK"))
{
arrIsItemVip[idUser][ITEM_MASK] = true;
}
else if (equal(szKey, "NECKLACE"))
{
arrIsItemVip[idUser][ITEM_NECKLACE] = true;
}
//ITEM_HEALTH - Periapt of Health
else if (equal(szKey, "HEALTH"))
{
arrIsItemVip[idUser][ITEM_HEALTH] = true;
new iCurrentHealth = clHP:getUserHealth(idUser);
new iBonusHp = get_pcvar_num(CVAR_wc3_health);
clHP:setUserHealth(idUser,iCurrentHealth + iBonusHp);
}
else if (equal(szKey, "HELM"))
{
arrIsItemVip[idUser][ITEM_HELM] = true;
}
else if (equal(szKey, "AMULET"))
{
arrIsItemVip[idUser][ITEM_AMULET] = true;
}
else if (equal(szKey, "INTELLECT"))
{
arrIsItemVip[idUser][ITEM_INTELLECT] = true;
}
else if (equal(szKey, "GRENADE_PROTECTION"))
{
arrIsItemVip[idUser][ITEM_GRENADE_PROTECTION] = true;
}
//ITEM_THIEF - Похититель
else if (equal(szKey, "THIEF"))
{
arrIsItemVip[idUser][ITEM_THIEF] = true;
ITEM_Thief(idUser);
}
}
}
public clVIP:fResetItemsAccessVip(const idUser)
{
arrIsItemVip[idUser][ITEM_ANKH] = false; // Ankh of Reincarnation
arrIsItemVip[idUser][ITEM_BOOTS] = false; // Boots of Speed
arrIsItemVip[idUser][ITEM_CLAWS] = false; // Claws of Attack
arrIsItemVip[idUser][ITEM_CLOAK] = false; // Cloak of Shadows
arrIsItemVip[idUser][ITEM_MASK] = false; // Mask of Death
arrIsItemVip[idUser][ITEM_NECKLACE] = false; // Necklace of Immunity
arrIsItemVip[idUser][ITEM_FROST] = false; // Orb of Frost
arrIsItemVip[idUser][ITEM_HEALTH] = false; // Periapt of Health
arrIsItemVip[idUser][ITEM_TOME] = false; // Tome of Experience
arrIsItemVip[idUser][ITEM_SCROLL] = false; // Scroll of Respawning
arrIsItemVip[idUser][ITEM_PROTECTANT] = false; // Mole Protectant
arrIsItemVip[idUser][ITEM_HELM] = false; // Helm of Excellence
arrIsItemVip[idUser][ITEM_AMULET] = false; // Amulet of the Cat
arrIsItemVip[idUser][ITEM_SOCK] = false; // Sock of the Feather
arrIsItemVip[idUser][ITEM_GLOVES] = false; // Flaming Gloves of Warmth
arrIsItemVip[idUser][ITEM_RING] = false; // Ring of Regeneration + 1
arrIsItemVip[idUser][ITEM_CHAMELEON] = false; // Chameleon
arrIsItemVip[idUser][ITEM_MOLE] = false; // Mole
arrIsItemVip[idUser][ITEM_INTELLECT] = false; // Intellect
arrIsItemVip[idUser][ITEM_GRENADE_PROTECTION] = false; // Grenade Protection
arrIsItemVip[idUser][ITEM_MIRROR_SHIELD] = false; // Mirror Shield
arrIsItemVip[idUser][ITEM_ESP] = false; // ESP
arrIsItemVip[idUser][ITEM_FROST_ARMOR] = false; // Frost Armor
arrIsItemVip[idUser][ITEM_DEATH_TOUCH] = false; //Death's Touch
arrIsItemVip[idUser][ITEM_HEALTH_POTION] = false; // Health Potion
arrIsItemVip[idUser][ITEM_ULTIMATE_TIMER_DIVIDER] = false; // Ultimate Timer Divider
arrIsItemVip[idUser][ITEM_STEEL_SKIN] = false; // Steel Skin
arrIsItemVip[idUser][ITEM_DEVOURER_LIGHT] = false; //
arrIsItemVip[idUser][ITEM_ICE_BLOCK] = false; //
arrIsItemVip[idUser][ITEM_THIEF] = false; //
arrIsItemVip[idUser][ITEM_MIRROR_ULTIMATE] = false; //
arrIsItemVip[idUser][ITEM_DEATHCOIL] = false; //
arrIsItemVip[idUser][ITEM_IMPALE] = false; //
arrIsItemVip[idUser][ITEM_SLEEP] = false; //
arrIsItemVip[idUser][ITEM_BOOK_DEAD] = false; //
arrIsItemVip[idUser][ITEM_TRANQUILITY] = false; //
}
clVIP:fShowVipMenu(const idUser,iPage = 0)
{
new iVipIndex = clVIP:isVipActiveIndex(idUser);
if(iVipIndex < 0)
{
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_VIP_NO_ACCESS",iAllWeaponsRound);
cssbChatColor(idUser,"%s%s",clVIP:fTagVip(),szMessage);
return;
}
new idMenu,szMenuData[256];
//Название главного меню
formatex(szMenuData, charsmax(szMenuData), "%L", LANG_PLAYER, "WC3_MENU_VIP");
idMenu = menu_create(szMenuData, "_Callback_VIP_MENU");
new szVipKeys[1024];
ArrayGetString(arrStrVipKeys,iVipIndex, szVipKeys, charsmax(szVipKeys));
new szKey[64];
while (szVipKeys[0] != 0 && strtok(szVipKeys, szKey, charsmax(szKey), szVipKeys, charsmax(szVipKeys), ','))
{
trim(szKey);
new szLangItem[64];
if (equal(szKey, "GREANADE_ALL"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_1",iGreanadeAllRound - arrIsItemVipOneRound[idUser][1]);
menu_additem(idMenu,szLangItem,"1",0,-1);
}
}
else if (equal(szKey, "HEGRENADE"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_2",iHegrenadeRound - arrIsItemVipOneRound[idUser][2]);
menu_additem(idMenu,szLangItem,"2",0,-1);
}
}
else if (equal(szKey, "FLASHBANG"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_3",iFlashbangRound - arrIsItemVipOneRound[idUser][3]);
menu_additem(idMenu,szLangItem,"3",0,-1);
}
}
else if (equal(szKey, "SMOKEGRENADE"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_4",iSmokegrenadeRound - arrIsItemVipOneRound[idUser][4]);
menu_additem(idMenu,szLangItem,"4",0,-1);
}
}
else if (equal(szKey, "RESPAWN"))
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_5",iRespawnRound - arrIsItemVipOneRound[idUser][5]);
menu_additem(idMenu,szLangItem,"5",0,-1);
}
else if (equal(szKey, "SPEED"))
{
new szOnOff[64];
if(arrBoolData[idUser][PB_VIP_SPEED] == true)
formatex(szOnOff, charsmax(szOnOff), "%L", LANG_PLAYER, "WC3_MENU_VIP_OFF");
else
formatex(szOnOff, charsmax(szOnOff), "%L", LANG_PLAYER, "WC3_MENU_VIP_ON");
formatex(szLangItem, charsmax(szLangItem), "%L %s", LANG_PLAYER, "WC3_MENU_VIP_6",fSpeedValueVip,szOnOff);
menu_additem(idMenu,szLangItem,"6",0,-1);
}
else if (equal(szKey, "GRAVITY"))
{
new szOnOff[64];
if(arrBoolData[idUser][PB_VIP_GRAVITY] == true)
formatex(szOnOff, charsmax(szOnOff), "%L", LANG_PLAYER, "WC3_MENU_VIP_OFF");
else
formatex(szOnOff, charsmax(szOnOff), "%L", LANG_PLAYER, "WC3_MENU_VIP_ON");
formatex(szLangItem, charsmax(szLangItem), "%L %s", LANG_PLAYER, "WC3_MENU_VIP_7",fGravityValueVip * 1000,szOnOff);
menu_additem(idMenu,szLangItem,"7",0,-1);
}
else if (equal(szKey, "HP"))
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_8",iHpValue,iHpRound - arrIsItemVipOneRound[idUser][8]);
menu_additem(idMenu,szLangItem,"8",0,-1);
}
else if (equal(szKey, "ARMOR"))
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_9",iArmorValue,iArmorRound - arrIsItemVipOneRound[idUser][9]);
menu_additem(idMenu,szLangItem,"9",0,-1);
}
else if (equal(szKey, "MONEY"))
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_10",iMoneyValue,iMoneyRound - arrIsItemVipOneRound[idUser][10]);
menu_additem(idMenu,szLangItem,"10",0,-1);
}
else if (equal(szKey, "AWP"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_11",iAwpRound - arrIsItemVipOneRound[idUser][11]);
menu_additem(idMenu,szLangItem,"11",0,-1);
}
}
else if (equal(szKey, "AK47"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_12",iAk47Round - arrIsItemVipOneRound[idUser][12]);
menu_additem(idMenu,szLangItem,"12",0,-1);
}
}
else if (equal(szKey, "DEAGLE"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_13",iDeagleRound - arrIsItemVipOneRound[idUser][13]);
menu_additem(idMenu,szLangItem,"13",0,-1);
}
}
else if (equal(szKey, "AUG"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_14",iAugRound - arrIsItemVipOneRound[idUser][14]);
menu_additem(idMenu,szLangItem,"14",0,-1);
}
}
else if (equal(szKey, "SG552"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_15",iSg552Round - arrIsItemVipOneRound[idUser][15]);
menu_additem(idMenu,szLangItem,"15",0,-1);
}
}
else if (equal(szKey, "M4A1"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_16",iM4a1Round - arrIsItemVipOneRound[idUser][16]);
menu_additem(idMenu,szLangItem,"16",0,-1);
}
}
else if (equal(szKey, "M249"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_17",iM249Round - arrIsItemVipOneRound[idUser][17]);
menu_additem(idMenu,szLangItem,"17",0,-1);
}
}
else if (equal(szKey, "M3"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_18",iM3Round - arrIsItemVipOneRound[idUser][18]);
menu_additem(idMenu,szLangItem,"18",0,-1);
}
}
else if (equal(szKey, "XM1014"))
{
if(clVIP:isMap() == false)
{
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_19",iXm1014Round - arrIsItemVipOneRound[idUser][19]);
menu_additem(idMenu,szLangItem,"19",0,-1);
}
}
else if (equal(szKey, "HP_ARMOR_MIN"))
{
new iMinHealth = clHP:getRaceMinHealth(idUser);
new iMaxArmor = clAr:getRaceMaxArmor(idUser);
formatex(szLangItem, charsmax(szLangItem), "%L", LANG_PLAYER, "WC3_MENU_VIP_20",iMinHealth,iMaxArmor,iHpArmorMinRound - arrIsItemVipOneRound[idUser][20]);
menu_additem(idMenu,szLangItem,"20",0,-1);
}
}
// Если нет предметов в меню
if (menu_items(idMenu) <= 0)
{
menu_destroy(idMenu);
return;
}
//Пункты меню (назад - следующий - выход)
formatex(szMenuData, charsmax(szMenuData), "\w%L", LANG_PLAYER, "WC3_MENU_BACK");
menu_setprop(idMenu, MPROP_BACKNAME, szMenuData);
formatex(szMenuData, charsmax(szMenuData), "\w%L", LANG_PLAYER, "WC3_MENU_NEXT");
menu_setprop(idMenu, MPROP_NEXTNAME, szMenuData);
formatex(szMenuData, charsmax(szMenuData), "\r%L", LANG_PLAYER, "WC3_MENU_EXIT");
menu_setprop(idMenu, MPROP_EXITNAME, szMenuData);
menu_display(idUser, idMenu, iPage);
}
//Отображение сообщения DHOD при взятии предмета випом
stock clVIP:fShowMessageDhud(const idUser,const iTypeItem)
{
if(iDhudMesssageVip <= 0)
return;
UTIL_ClearDHudChannel(idUser);
UTIL_ClearHudChannel(idUser,HUD_XP);
WC3_ShowBar(idUser);
new iRed = random_num(0,255);
new iGreen = random_num(0,255);
new iBlue = random_num(0,255);
new szShowMessage[256];
new szUserName[32];
get_user_name(idUser, szUserName, charsmax(szUserName));
switch(iTypeItem)
{
case enHP_ARMOR_MIN:
{
new iMinHealth = clHP:getRaceMinHealth(idUser);
new iMaxArmor = clAr:getRaceMaxArmor(idUser);
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n(%d | %d)",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_20",iMinHealth,iMaxArmor);
}
case enGREANADE_ALL:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_1");
}
case enHEGRENADE:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_2");
}
case enFLASHBANG:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_3");
}
case enSMOKEGRENADE:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_4");
}
case enRESPAWN:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_5");
}
case enSPEED:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n%.1f",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_6",fSpeedValueVip);
}
case enGRAVITY:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n%.1f",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_7",fGravityValueVip * 1000);
}
case enHP:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n%d",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_8",iHpValue);
}
case enARMOR:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n%d",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_9",iArmorValue);
}
case enMONEY:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L^n%d",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_10",iMoneyValue);
}
case enAWP:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_11");
}
case enAK47:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_12");
}
case enDEAGLE:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_13");
}
case enAUG:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_14");
}
case enSG552:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_15");
}
case enM4A1:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_16");
}
case enM249:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_17");
}
case enM3:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_18");
}
case enXM1014:
{
format(szShowMessage, charsmax(szShowMessage), "%s^n+ %L",szUserName,LANG_PLAYER,"WC3_CHAT_VIP_19");
}
}//switch
set_dhudmessage(iRed,iGreen,iBlue,0.83,0.5,2,0.0,2.0,0.02,0.02, -1);
if(iDhudMesssageVip == 1)
show_dhudmessage(idUser, szShowMessage);
else if(iDhudMesssageVip == 2)
show_dhudmessage(0, szShowMessage);
}
//Отображение сообщения в чат при взятии предмета випом
stock clVIP:fShowMessageChat(const idUser,const iTypeItem)
{
if(iChatMesssageVip <= 0)
return;
new szShowMessage[256];
new szUserName[32];
get_user_name(idUser, szUserName, charsmax(szUserName));
switch(iTypeItem)
{
case enHP_ARMOR_MIN:
{
new iMinHealth = clHP:getRaceMinHealth(idUser);
new iMaxArmor = clAr:getRaceMaxArmor(idUser);
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !y(!t%d !y| !t%d!y)",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_20",iMinHealth,iMaxArmor);
}
case enGREANADE_ALL:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_1");
}
case enHEGRENADE:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_2");
}
case enFLASHBANG:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_3");
}
case enSMOKEGRENADE:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_4");
}
case enRESPAWN:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_5");
}
case enSPEED:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !t%.1f",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_6",fSpeedValueVip);
}
case enGRAVITY:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !t%.1f",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_7",fGravityValueVip * 1000);
}
case enHP:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !t%d",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_8",iHpValue);
}
case enARMOR:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !t%d",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_9",iArmorValue);
}
case enMONEY:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^" !t%d",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_10",iMoneyValue);
}
case enAWP:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_11");
}
case enAK47:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_12");
}
case enDEAGLE:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_13");
}
case enAUG:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_14");
}
case enSG552:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_15");
}
case enM4A1:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_16");
}
case enM249:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_17");
}
case enM3:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_18");
}
case enXM1014:
{
format(szShowMessage, charsmax(szShowMessage), "!t%s %L !g^"%L^"",szUserName,LANG_PLAYER,"WC3_APPLY",LANG_PLAYER,"WC3_CHAT_VIP_19");
}
}//switch
if(iChatMesssageVip == 1)
cssbChatColor(idUser,"%s%s",clVIP:fTagVip(),szShowMessage);
else if(iChatMesssageVip == 2)
cssbChatColor(0,"%s%s",clVIP:fTagVip(),szShowMessage);
}
stock clVIP:fTagVip()
{
new szTag[64];
formatex(szTag, sizeof(szTag) - 1, "%L%L%L ",LANG_PLAYER,"WC3_BRACKET_LEFT_VIP",LANG_PLAYER,"WC3_PREFIX_VIP",LANG_PLAYER,"WC3_BRACKET_RIGHT_VIP");
return szTag;
}
public _Callback_VIP_MENU(idUser, idMenu, idItem)
{
if ( !WC3_Check() )
return PLUGIN_HANDLED;
// Возврат в главное меню
if (idItem == MENU_EXIT)
{
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
static _access, szInfoMenu[8], callback;
menu_item_getinfo(idMenu, idItem, _access, szInfoMenu, sizeof(szInfoMenu) - 1, _, _, callback);
new iNumberItem = str_to_num(szInfoMenu);
switch (iNumberItem)
{
case 1://GREANADE_ALL
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][1], iGreanadeAllRound))
return PLUGIN_HANDLED;
//HE Grenade
give_item(idUser, "weapon_hegrenade" );
//Concussion Grenades (i.e. Flashbang)
give_item(idUser, "weapon_flashbang" );
give_item(idUser, "weapon_flashbang" );
//Smoke grenades
give_item(idUser, "weapon_smokegrenade" );
arrIsItemVipOneRound[idUser][1]++;
clVIP:fShowMessageDhud(idUser,enGREANADE_ALL);
clVIP:fShowMessageChat(idUser,enGREANADE_ALL);
}
case 2://HEGRENADE
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][2], iHegrenadeRound))
return PLUGIN_HANDLED;
//HE Grenade
give_item(idUser, "weapon_hegrenade");
arrIsItemVipOneRound[idUser][2]++;
clVIP:fShowMessageDhud(idUser,enHEGRENADE);
clVIP:fShowMessageChat(idUser,enHEGRENADE);
}
case 3://FLASHBANG
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][3], iFlashbangRound))
return PLUGIN_HANDLED;
//Concussion Grenades (i.e. Flashbang)
give_item(idUser, "weapon_flashbang" );
give_item(idUser, "weapon_flashbang" );
arrIsItemVipOneRound[idUser][3]++;
clVIP:fShowMessageDhud(idUser,enFLASHBANG);
clVIP:fShowMessageChat(idUser,enFLASHBANG);
}
case 4://SMOKEGRENADE
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][4], iSmokegrenadeRound))
return PLUGIN_HANDLED;
//Smoke grenades
give_item(idUser, "weapon_smokegrenade" );
arrIsItemVipOneRound[idUser][4]++;
clVIP:fShowMessageDhud(idUser,enSMOKEGRENADE);
clVIP:fShowMessageChat(idUser,enSMOKEGRENADE);
}
case 5://RESPAWN
{
if(!clGl::isUserNoTeam(idUser))
{
menu_destroy(idMenu);
return PLUGIN_HANDLED;
}
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][5], iRespawnRound))
return PLUGIN_HANDLED;
new iRespEntity;
new iTeam = get_user_team(idUser);
if (iTeam == TEAM_T )
iRespEntity = CanTeleportOnBaseT();
if (iTeam == TEAM_CT )
iRespEntity = CanTeleportOnBaseCT();
if(pev_valid(iRespEntity))
{
clVIP:fTeleportRespawn(idUser, iRespEntity);
WC3_PostSpawn(idUser);
arrIsItemVipOneRound[idUser][5]++;
clVIP:fShowMessageDhud(idUser,enRESPAWN);
clVIP:fShowMessageChat(idUser,enRESPAWN);
}
}
case 6://SPEED
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
arrBoolData[idUser][PB_VIP_SPEED] = ( ( arrBoolData[idUser][PB_VIP_SPEED] == false ) ? true : false );
SHARED_SetSpeed(idUser);
arrIsItemVipOneRound[idUser][6]++;
if(arrBoolData[idUser][PB_VIP_SPEED] == true)
{
clVIP:fShowMessageDhud(idUser,enSPEED);
clVIP:fShowMessageChat(idUser,enSPEED);
}
}
case 7://GRAVITY
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
arrBoolData[idUser][PB_VIP_GRAVITY] = ( ( arrBoolData[idUser][PB_VIP_GRAVITY] == false ) ? true : false );
SHARED_SetGravity(idUser);
arrIsItemVipOneRound[idUser][7]++;
if(arrBoolData[idUser][PB_VIP_GRAVITY] == true)
{
clVIP:fShowMessageDhud(idUser,enGRAVITY);
clVIP:fShowMessageChat(idUser,enGRAVITY);
}
}
case 8://HP
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][8], iHpRound))
return PLUGIN_HANDLED;
new iMaxHealth = clHP:getRaceMaxHealth(idUser);
new iCurrentHealth = clHP:getUserHealth(idUser);
new iBonusHp = iHpValue;
if (iCurrentHealth < iMaxHealth)
{
if( (iCurrentHealth + iBonusHp) > iMaxHealth )
clHP:setUserHealth(idUser,iMaxHealth);
else
clHP:setUserHealth(idUser,iCurrentHealth + iBonusHp);
}
arrIsItemVipOneRound[idUser][8]++;
clVIP:fShowMessageDhud(idUser,enHP);
clVIP:fShowMessageChat(idUser,enHP);
}
case 9://ARMOR
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][9], iArmorRound))
return PLUGIN_HANDLED;
new iMaxArmor = clAr:getRaceMaxArmor(idUser);
new CsArmorType:tArmor;
new iCurrentArmor = clAr:getUserArmor(idUser,tArmor);
new iBonusArmor = iArmorValue;
if((iCurrentArmor + iBonusArmor) > iMaxArmor)
clAr:setUserArmor(idUser,iMaxArmor);
else
clAr:setUserArmor(idUser,iCurrentArmor + iBonusArmor);
arrIsItemVipOneRound[idUser][9]++;
clVIP:fShowMessageDhud(idUser,enARMOR);
clVIP:fShowMessageChat(idUser,enARMOR);
}
case 10://MONEY
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][10], iMoneyRound))
return PLUGIN_HANDLED;
new iMoneyUserCurrent = SHARED_GetUserMoney(idUser);
new iBonusMoney = iMoneyValue;
SHARED_SetUserMoney(idUser, iMoneyUserCurrent + iBonusMoney, 1 );
arrIsItemVipOneRound[idUser][10]++;
clVIP:fShowMessageDhud(idUser,enMONEY);
clVIP:fShowMessageChat(idUser,enMONEY);
}
case 11://AWP
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][11], iAwpRound))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_awp" );
give_item(idUser,"ammo_338magnum");
give_item(idUser,"ammo_338magnum");
give_item(idUser,"ammo_338magnum");
arrIsItemVipOneRound[idUser][11]++;
clVIP:fShowMessageDhud(idUser,enAWP);
clVIP:fShowMessageChat(idUser,enAWP);
}
case 12://AK47
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][12], iAk47Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_ak47");
give_item(idUser, "ammo_762nato");
give_item(idUser, "ammo_762nato");
give_item(idUser, "ammo_762nato");
arrIsItemVipOneRound[idUser][12]++;
clVIP:fShowMessageDhud(idUser,enAK47);
clVIP:fShowMessageChat(idUser,enAK47);
}
case 13://DEAGLE
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][13], iDeagleRound))
return PLUGIN_HANDLED;
clVIP:fStripWpnSecondary(idUser);
give_item(idUser, "weapon_deagle");
give_item(idUser, "ammo_50ae");
give_item(idUser, "ammo_50ae");
give_item(idUser, "ammo_50ae");
give_item(idUser, "ammo_50ae");
give_item(idUser, "ammo_50ae");
arrIsItemVipOneRound[idUser][13]++;
clVIP:fShowMessageDhud(idUser,enDEAGLE);
clVIP:fShowMessageChat(idUser,enDEAGLE);
}
case 14://AUG
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][14], iAugRound))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_aug");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
arrIsItemVipOneRound[idUser][14]++;
clVIP:fShowMessageDhud(idUser,enAUG);
clVIP:fShowMessageChat(idUser,enAUG);
}
case 15://SG552
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][15], iSg552Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_sg552");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
arrIsItemVipOneRound[idUser][15]++;
clVIP:fShowMessageDhud(idUser,enSG552);
clVIP:fShowMessageChat(idUser,enSG552);
}
case 16://M4A1
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][16], iM4a1Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_m4a1");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
give_item(idUser, "ammo_556nato");
arrIsItemVipOneRound[idUser][16]++;
clVIP:fShowMessageDhud(idUser,enM4A1);
clVIP:fShowMessageChat(idUser,enM4A1);
}
case 17://M249
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][17], iM249Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_m249");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
give_item(idUser, "ammo_556natobox");
arrIsItemVipOneRound[idUser][17]++;
clVIP:fShowMessageDhud(idUser,enM249);
clVIP:fShowMessageChat(idUser,enM249);
}
case 18://M3
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][18], iM3Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_m3");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
arrIsItemVipOneRound[idUser][18]++;
clVIP:fShowMessageDhud(idUser,enM3);
clVIP:fShowMessageChat(idUser,enM3);
}
case 19://XM1014
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isActiveAllWpnRound(idUser,idMenu,idItem))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][19], iXm1014Round))
return PLUGIN_HANDLED;
clVIP:fStripWpnPrimary(idUser);
give_item(idUser, "weapon_xm1014");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
give_item(idUser, "ammo_buckshot");
arrIsItemVipOneRound[idUser][19]++;
clVIP:fShowMessageDhud(idUser,enXM1014);
clVIP:fShowMessageChat(idUser,enXM1014);
}
case 20://HP_ARMOR_MIN
{
if(!clVIP:fMenuDestroyVip(idUser,idMenu))
return PLUGIN_HANDLED;
if(!clVIP:isCountRoundVip(idUser,idMenu,idItem,arrIsItemVipOneRound[idUser][20], iHpArmorMinRound))
return PLUGIN_HANDLED;
new iMinHealth = clHP:getRaceMinHealth(idUser);
clHP:setUserHealth(idUser,iMinHealth);
new iMaxArmor = clAr:getRaceMaxArmor(idUser);
clAr:setUserArmor(idUser,iMaxArmor);
arrIsItemVipOneRound[idUser][20]++;
clVIP:fShowMessageDhud(idUser,enHP_ARMOR_MIN);
clVIP:fShowMessageChat(idUser,enHP_ARMOR_MIN);
}
}
menu_destroy(idMenu);
clVIP:fShowVipMenu(idUser,floatround(float(idItem / 7)));
return PLUGIN_HANDLED;
}
public clVIP:fTeleportRespawn(const idUser, const resp_ent)
{
new Float: ptOriginPlayer[3], Float: angles[3];
if(!pev_valid(resp_ent))
return;
pev(resp_ent, pev_origin, ptOriginPlayer);
pev(resp_ent, pev_angles, angles);
Create_TE_BEAMTORUS(ptOriginPlayer, 250, arrIdSprites[SPR_ROGUE_RING], 0, 9, 5, 15, 3, 255, 255, 255, 255, 0, 0);
new iTeam = get_user_team(idUser);
if (iTeam == TEAM_T )
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_DLIGHT);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[0]);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[1]);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[2]);
write_byte(50) ;
write_byte(238); // red
write_byte(19); // green
write_byte(45); // blue
write_byte(255);
write_byte(3);
write_byte(1);
message_end();
}
if (iTeam == TEAM_CT )
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_DLIGHT);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[0]);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[1]);
engfunc(EngFunc_WriteCoord, ptOriginPlayer[2]);
write_byte(50) ;
write_byte(19); // red
write_byte(89); // green
write_byte(238); // blue
write_byte(255);
write_byte(3);
write_byte(1);
message_end();
}
emit_sound(idUser, CHAN_WEAPON, arrStrSounds[SOUND_VENGEANCE], 1.0, ATTN_NORM, 0, PITCH_NORM);
ExecuteHamB(Ham_CS_RoundRespawn,idUser);
set_pev(idUser, pev_velocity, Float:{0.0, 0.0, 0.0});
set_pev(idUser, pev_basevelocity, Float:{0.0, 0.0, 0.0});
set_pev(idUser, pev_origin, ptOriginPlayer);
set_pev(idUser, pev_angles, angles);
set_pev(idUser, pev_fixangle, true);
}
bool:clVIP:isActiveAllWpnRound(const idUser,const idMenu,const idItem)
{
if(iRoundCount < iAllWeaponsRound)
{
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_VIP_ACTIVE_WPN",iAllWeaponsRound);
cssbChatColor(idUser,"%s%s",clVIP:fTagVip(),szMessage);
menu_destroy(idMenu);
clVIP:fShowVipMenu(idUser,floatround(float(idItem / 7)));
return false;
}
return true;
}
bool:clVIP:isCountRoundVip(const idUser,const idMenu,const idItem,const iCountRoundItemVip, const iValueRoundItemVip)
{
if(iCountRoundItemVip >= iValueRoundItemVip)
{
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_VIP_COUNT_ROUND",iValueRoundItemVip);
cssbChatColor(idUser,"%s%s",clVIP:fTagVip(),szMessage);
menu_destroy(idMenu);
clVIP:fShowVipMenu(idUser,floatround(float(idItem / 7)));
return false;
}
return true;
}
//Закрытие меню если выбран пункт который не должен срабатывать если игрок жив
bool:clVIP:fMenuDestroyVip(const idUser,const idMenu)
{
if (!WC3_Check())
return false;
if(!is_user_alive(idUser) || !is_user_connected(idUser))
{
format(szMessage, charsmax(szMessage), "%L",LANG_PLAYER,"CLIENT_PRINT_VIP_NO_ALIVE");
cssbChatColor(idUser,"%s%s",clVIP:fTagVip(),szMessage);
menu_destroy(idMenu);
return false;
}
return true;
}
//Удаление всех автоматов
public clVIP:fStripWpnPrimary(const idUser)
{
//Benneli M3 Super90
ham_strip_weapon(idUser,"weapon_m3");
//Benneli XM1014
ham_strip_weapon(idUser,"weapon_xm1014");
//H&K MP5-Navy
ham_strip_weapon(idUser,"weapon_mp5navy");
//Steyr Tactical
ham_strip_weapon(idUser,"weapon_tmp");
//FN P90
ham_strip_weapon(idUser,"weapon_p90");
//Ingram MAC-10
ham_strip_weapon(idUser,"weapon_mac10");
//IDF Defender
ham_strip_weapon(idUser,"weapon_galil");
//Clarion 5.56
ham_strip_weapon(idUser,"weapon_famas");
//H&K UMP
ham_strip_weapon(idUser,"weapon_ump45");
//AK-47
ham_strip_weapon(idUser,"weapon_ak47");
//Colt M4A1 Carbine
ham_strip_weapon(idUser,"weapon_m4a1");
//Steyr AUG
ham_strip_weapon(idUser,"weapon_aug");
//Sig SG-552 Commando
ham_strip_weapon(idUser,"weapon_sg552");
//Steyr Scout
ham_strip_weapon(idUser,"weapon_scout");
//AI Arctic Warfare/Magnum
ham_strip_weapon(idUser,"weapon_awp");
//H&K G3/SG-1
ham_strip_weapon(idUser,"weapon_g3sg1");
//Sig SG-550 Sniper
ham_strip_weapon(idUser,"weapon_sig550");
//FN M249 Para
ham_strip_weapon(idUser,"weapon_m249");
}
//Удаление всех пистолетов
public clVIP:fStripWpnSecondary(const idUser)
{
//H&K USP .45 Tactical
ham_strip_weapon(idUser,"weapon_usp");
//Glock 18 Select Fire
ham_strip_weapon(idUser,"weapon_glock18");
//Desert Eagle .50 AE
ham_strip_weapon(idUser,"weapon_deagle");
//SIG P228
ham_strip_weapon(idUser,"weapon_p228");
//Dual Beretta 96G
ham_strip_weapon(idUser,"weapon_elite");
//FN Five-Seven
ham_strip_weapon(idUser,"weapon_fiveseven");
}
//Сброс всех счетчиков на ограничение взятия предмета
public clVIP:fLimitItemVipOneRound(const idUser)
{
arrIsItemVipOneRound[idUser][0] = 0;
arrIsItemVipOneRound[idUser][1] = 0;
arrIsItemVipOneRound[idUser][2] = 0;
arrIsItemVipOneRound[idUser][3] = 0;
arrIsItemVipOneRound[idUser][4] = 0;
arrIsItemVipOneRound[idUser][5] = 0;
arrIsItemVipOneRound[idUser][6] = 0;
arrIsItemVipOneRound[idUser][7] = 0;
arrIsItemVipOneRound[idUser][8] = 0;
arrIsItemVipOneRound[idUser][9] = 0;
arrIsItemVipOneRound[idUser][10] = 0;
arrIsItemVipOneRound[idUser][11] = 0;
arrIsItemVipOneRound[idUser][12] = 0;
arrIsItemVipOneRound[idUser][13] = 0;
arrIsItemVipOneRound[idUser][14] = 0;
arrIsItemVipOneRound[idUser][15] = 0;
arrIsItemVipOneRound[idUser][16] = 0;
arrIsItemVipOneRound[idUser][17] = 0;
arrIsItemVipOneRound[idUser][18] = 0;
arrIsItemVipOneRound[idUser][19] = 0;
arrIsItemVipOneRound[idUser][20] = 0;
}
Заранее благодарен!
Последнее редактирование: