Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <amxmisc>
- #include <hamsandwich>
- #include <fakemeta>
- #include <engine>
- #include <cstrike>
- #include <fun>
- #include <csx>
- #include <nvault>
- #define PLUGIN "CSGO OUTSTANDING"
- #define VERSION "1.3"
- #define ENG_NULLENT -1
- #define EV_INT_WEAPONKEY EV_INT_impulse
- #define SKINS_MAX 32
- #define MAX_RANKS 32
- #define KEY_COST 50
- #define RAFFLE_COST 10
- #define FRAGMENTS_TO_CRAFT 3
- #define DROP_FRAGMENTS_CHANCE 60
- #define POINTS_CHANCE 50
- #define POINTS_FOR_KILL 5
- #define DROP_CASE_CHANCE 10
- enum Data {
- Points,
- Case,
- Keys,
- Fragments
- }
- enum eData {
- Name[32],
- vModel[64],
- pModel[64],
- Type,
- Chance
- }
- new g_aSkins[SKINS_MAX][eData];
- /* Ranks system */
- enum eRankData {
- RankName[32],
- valFirst,
- valSecond
- }
- new g_szRanks[MAX_RANKS][eRankData] ;
- new g_szRank[33][2][32], ranksNum;
- /* Gift system */
- new g_iReceiver[33], g_iIterator[33], g_iSkinToGift[33];
- /* Destroy system */
- new g_iSkinToDestroy[33];
- /* Raffle system */
- new g_iRafflePlayers[33], raffleMembers;
- /* Market system */
- new g_iSkinsInMarket[33][SKINS_MAX], g_iPrice[33], iSeller[33][SKINS_MAX];
- /* Mute system */
- new iMutedPlayers[33][33];
- /* Core */
- new g_iPlayerSkins[33][SKINS_MAX], g_iPlayerData[33][Data];
- new g_iSkins[33][SKINS_MAX], g_iMaxChance, g_iShowedSkin[33][31], skinsNum;
- new const szTag[] = "[CS:GO OUTSTANDING]"
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, "FaTzZu a.k.a Jailbreak suge ****");
- register_clcmd("say /menu", "cmdSayMenu");
- register_clcmd("chooseteam", "cmdSayMenu");
- register_logevent("evRoundEnd",2, "1=Round_End");
- register_event("DeathMsg", "evDeathMsg", "a");
- register_event("SendAudio", "terroristsWin" , "a", "2&%!MRAD_terwin");
- register_event("SendAudio", "ctsWin", "a", "2&%!MRAD_ctwin");
- // Weapon entity names
- new const szWeaponNames[][] = {
- "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
- "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
- "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
- "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
- "weapon_ak47", "weapon_knife", "weapon_p90"
- };
- for (new i; i < sizeof(szWeaponNames); i++)
- {
- if (szWeaponNames[i][0])
- {
- RegisterHam(Ham_Item_AddToPlayer, szWeaponNames[i], "hamAddWeaponToPlayer");
- RegisterHam(Ham_Item_Deploy, szWeaponNames[i], "hamItemDeploy", 1);
- }
- }
- register_forward(FM_SetModel, "fwSetModel");
- register_clcmd("Insert_price", "cmdInsertPrice");
- }
- /* Precaching models */
- public plugin_precache()
- {
- new szConfigsDir[128], szMessage[64];
- get_configsdir(szConfigsDir, charsmax(szConfigsDir));
- add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/skins.ini");
- if(!file_exists(szConfigsDir))
- {
- write_file(szConfigsDir, ";TYPES 28=Ak47 22=M4a1 18=AWP 26=Deagle 29=Knife");
- write_file(szConfigsDir, ";Skin name v_Model p_Model TYPE Chance");
- write_file(szConfigsDir, ";Exemplu:");
- write_file(szConfigsDir, ";^"Ak47 Dragon Lore^" ^"models/GO/v_ak47_dragonlore.mdl^" ^"models/GO/p_ak47_dragonlore.mdl^" ^"28^" ^"20^"");
- }
- new f = fopen(szConfigsDir, "rt");
- if(!f)
- return;
- new szLineData[256], szName[32], szViewModel[64], szPlayerModel[64], szType[8], szChance[4];
- while(!feof(f))
- {
- fgets(f, szLineData, charsmax(szLineData));
- if(strlen(szLineData) < 2 || szLineData[0] == ';' || !szLineData[0])
- continue;
- parse(szLineData, szName, charsmax(szName), szViewModel, charsmax(szViewModel), szPlayerModel, charsmax(szPlayerModel), szType, charsmax(szType), szChance, charsmax(szChance))
- new iType = str_to_num(szType);
- new iChance = str_to_num(szChance)
- copy(g_aSkins[skinsNum][Name], 31, szName);
- copy(g_aSkins[skinsNum][vModel], 63, szViewModel);
- copy(g_aSkins[skinsNum][pModel], 63, szPlayerModel);
- g_aSkins[skinsNum][Type] = iType;
- g_aSkins[skinsNum][Chance] = iChance;
- skinsNum++
- }
- fclose(f);
- g_iMaxChance = g_aSkins[0][Chance];
- for (new i; i < skinsNum; i++)
- {
- if (g_aSkins[0][Chance] > g_iMaxChance)
- {
- g_iMaxChance = g_aSkins[0][Chance];
- }
- }
- for (new i; i < skinsNum; i++)
- {
- if (!file_exists(g_aSkins[0][vModel]))
- {
- formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][vModel]);
- set_fail_state(szMessage);
- }
- if (strlen(g_aSkins[0][pModel]) > 3)
- {
- if (!file_exists(g_aSkins[0][pModel]))
- {
- formatex(szMessage, charsmax(szMessage), "Missing model [%s]", g_aSkins[0][pModel]);
- set_fail_state(szMessage);
- }
- }
- precache_model(g_aSkins[i][vModel]);
- if (strlen(g_aSkins[i][pModel]) > 3)
- {
- precache_model(g_aSkins[i][pModel]);
- }
- }
- }
- /* Executing cfg's */
- public plugin_cfg()
- {
- new szConfigsDir[128];
- get_configsdir(szConfigsDir, charsmax(szConfigsDir));
- add(szConfigsDir, charsmax(szConfigsDir), "%s/csgo/ranks.ini");
- if(!file_exists(szConfigsDir))
- write_file(szConfigsDir, ";RANK - PRIMA VALOARE - A 2-A VALOARE", -1);
- new f = fopen(szConfigsDir, "rt");
- if(!f)
- return;
- new szLineRankData[128], szRank[32], szFirstVal[8], szLastVal[8];
- while(!feof(f))
- {
- fgets(f, szLineRankData, charsmax(szLineRankData));
- if(!szLineRankData[0] || szLineRankData[0] == ';' || strlen(szLineRankData) < 2)
- continue;
- parse(szLineRankData, szRank, charsmax(szRank), szFirstVal, charsmax(szFirstVal), szLastVal, charsmax(szLastVal));
- new iFirstVal = str_to_num(szFirstVal);
- new iLastVal = str_to_num(szLastVal);
- copy(g_szRanks[ranksNum][RankName], charsmax(g_szRanks[]), szRank);
- g_szRanks[ranksNum][valFirst] = iFirstVal
- g_szRanks[ranksNum][valSecond] = iLastVal
- ranksNum++;
- }
- }
- /* When client connects */
- public client_putinserver(id)
- {
- new iPlayers[32], iNum;
- get_players(iPlayers, iNum);
- for(new i; i < iNum; i++)
- iMutedPlayers[id][iPlayers[i]] = 0;
- for(new i; i < 31; i++)
- g_iShowedSkin[id][i] = skinsNum;
- g_iSkinToGift[id] = skinsNum;
- g_iSkinToDestroy[id] = skinsNum;
- g_iPrice[id] = 0;
- set_task(1.5, "taskSetRank", id);
- LoadData(id);
- LoadMarket(id);
- }
- /* Set user's rank on putinserver and on player kill*/
- public taskSetRank(id)
- {
- new iStats[8], iBody[8];
- new iRankPos = get_user_stats(id, iStats, iBody);
- for(new i; i <= ranksNum; i++)
- {
- if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
- {
- copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
- if(i!=0)
- copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
- break;
- }
- }
- }
- /* Hook DeathMsg event */
- public evDeathMsg()
- {
- refreshRanks();
- new iChance;
- new iKiller = read_data(1);
- new iVictim = read_data(2);
- if(!is_user_alive(iKiller) || iKiller == iVictim)
- return;
- iChance = random_num(1, 100);
- if (iChance <= POINTS_CHANCE)
- {
- g_iPlayerData[iKiller][Points] += POINTS_FOR_KILL;
- client_print(iKiller, print_center, "+%d Points", POINTS_FOR_KILL);
- }
- if(iChance <= DROP_CASE_CHANCE)
- {
- g_iPlayerData[iKiller][Case]++;
- }
- refreshRanks();
- }
- /* Refreshing every player rank */
- stock refreshRanks()
- {
- new iPlayers[32], iNum;
- get_players(iPlayers, iNum);
- for(new i;i<iNum;i++)
- {
- new id = iPlayers[i];
- new iStats[8], iBody[8];
- new iRankPos = get_user_stats(id, iStats, iBody);
- for(new i; i <= ranksNum; i++)
- if(g_szRanks[i][valFirst] <= iRankPos <= g_szRanks[i][valSecond])
- {
- copy(g_szRank[id][0], 31, g_szRanks[i][RankName])
- if(i!=0)
- copy(g_szRank[id][1], 31, g_szRanks[i-1][RankName])
- break;
- }
- }
- }
- /* When client disconnect */
- public client_disconnect(id)
- {
- SaveData(id)
- }
- /* Ham_Item_Deploy */
- public hamItemDeploy(ent)
- {
- static id;
- id = fm_cs_get_weapon_ent_owner(ent);
- if (!pev_valid(id)) {
- return;
- }
- if (g_iShowedSkin[id][cs_get_weapon_id(ent)] < skinsNum)
- {
- set_pev(id, pev_viewmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][vModel]);
- if(strlen(g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]) > 3)
- {
- set_pev(id, pev_weaponmodel2, g_aSkins[ g_iShowedSkin[id][cs_get_weapon_id(ent)]][pModel]);
- }
- }
- }
- /** Principal Menu **/
- public cmdSayMenu(id)
- {
- new menu, szText[128], szText2[128];
- formatex(szText, charsmax(szText), "\w[ \yCSGO OUTSTANDING \w] Points: \y%d \w| Keys: \y%d \w^n Case: \y%d \w| Fragments: \y%d", g_iPlayerData[id][Points], g_iPlayerData[id][Keys], g_iPlayerData[id][Case], g_iPlayerData[id][Fragments])
- menu = menu_create(szText, "menuHandler");
- menu_additem(menu, "Aplica \ySKIN");
- menu_additem(menu, "Deschide \ycufere \w| Crafteaza \ychei^n");
- menu_additem(menu, "Ofera un \ycadou");
- menu_additem(menu, "Distruge un \yskin^n");
- menu_additem(menu, "\wSkins \yMarket^n");
- if(strlen(g_szRank[id][1]))
- {
- formatex(szText2, charsmax(szText2), "Rank actual: \y%s^n\wRank urmator: \y%s", g_szRank[id][0], g_szRank[id][1]);
- }
- else
- {
- formatex(szText2, charsmax(szText2), "Rank actual: \y%s \w( \dRank maxim \w)", g_szRank[id][0]);
- }
- formatex(szText, charsmax(szText), "Jocuri de \ynoroc\w^n^n%s", szText2);
- menu_additem(menu, szText);
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- return PLUGIN_HANDLED;
- }
- public menuHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0:
- {
- if (user_have_skins(id))
- {
- showSkins(id);
- }
- else
- {
- ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
- cmdSayMenu(id);
- }
- }
- case 1: openCaseMenu(id);
- case 2:
- {
- if (user_have_skins(id))
- {
- showGiftMenu(id);
- }
- else
- {
- ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
- cmdSayMenu(id);
- }
- }
- case 3:
- {
- if (user_have_skins(id))
- {
- showDestroyMenu(id);
- }
- else
- {
- ColorChat(id, "!g%s!nNu ai !gskinuri !nin inventar!", szTag);
- cmdSayMenu(id);
- }
- }
- case 4: cmdShowMarket(id)
- //case 5: cmdShowTradeMenu(id);
- case 5: showGamesMenu(id)
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Apply skin menu */
- public showSkins(id)
- {
- new menu, szText[64], k=0;
- menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \ySkinurile \wtale", "skinsMenuHandler");
- for(new i; i < skinsNum; i++)
- {
- if(g_iPlayerSkins[id][i])
- {
- formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
- menu_additem(menu, szText);
- g_iSkins[id][k++] = i;
- }
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- new iSkinID = g_iSkins[id][item];
- g_iShowedSkin [id][g_aSkins[iSkinID][Type]] = iSkinID;
- ColorChat(id, "!g%s!nAi aplicat skinul !g%s!n.", szTag, g_aSkins[iSkinID][Name]);
- client_cmd(id, "lastinv");
- showSkins(id);
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Open case menu */
- public openCaseMenu(id)
- {
- new menu, szText[128];
- formatex(szText, charsmax(szText), "\w[ \yCSGO OUTSTANDING \w] Points: \y%d \w| Keys: \y%d \w| Case: \y%d \w| Fragments: \y%d", g_iPlayerData[id][Points], g_iPlayerData[id][Keys], g_iPlayerData[id][Case], g_iPlayerData[id][Fragments])
- menu = menu_create(szText, "openCaseMenuHandler");
- if(!g_iPlayerData[id][Keys] || !g_iPlayerData[id][Case])
- {
- formatex(szText, charsmax(szText), "\dDeschide \ycufar^n");
- }
- else
- {
- formatex(szText, charsmax(szText), "Deschide \ycufar^n");
- }
- menu_additem(menu, szText);
- if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
- {
- formatex(szText, charsmax(szText), "\dCrafteaza o \ycheie \d( \y%d \d/ \y%d \d)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
- }
- else
- {
- formatex(szText, charsmax(szText), "Crafteaza o \ycheie \w( \y%d \w/ \y%d \w)", g_iPlayerData[id][Fragments], FRAGMENTS_TO_CRAFT);
- }
- menu_additem(menu, szText);
- if(g_iPlayerData[id][Points] < KEY_COST)
- {
- formatex(szText, charsmax(szText), "\dCumpara o \ycheie \w- \y%d \dPuncte", KEY_COST);
- }
- else
- {
- formatex(szText, charsmax(szText), "Cumpara o \ycheie \w- \y%d \wPuncte", KEY_COST);
- }
- menu_additem(menu, szText);
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public openCaseMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0:
- {
- if(!g_iPlayerData[id][Keys])
- {
- ColorChat(id, "!g%s!n Nu ai o !gcheie!n!", szTag);
- return PLUGIN_HANDLED;
- }
- if(!g_iPlayerData[id][Case])
- {
- ColorChat(id, "!g%s!n Nu ai un !gcufar!n!", szTag);
- return PLUGIN_HANDLED;
- }
- new iSkins[SKINS_MAX], iRand, iChance, k=0;
- iChance = random_num(1, g_iMaxChance);
- for(new i; i < skinsNum; i++)
- {
- if(iChance <= g_aSkins[i][Chance])
- iSkins[k++] = i;
- }
- iRand = k == 0 ? iSkins[k] : iSkins[random(k)];
- g_iPlayerSkins[id][iRand]++;
- g_iPlayerData[id][Keys]--;
- g_iPlayerData[id][Case]--;
- ColorChat(id, "!g%s!nAi deschis un cufar si ai primit skinul !g%s!n.", szTag, g_aSkins[iRand][Name]);
- SaveData(id);
- openCaseMenu(id);
- }
- case 1:
- {
- if(g_iPlayerData[id][Fragments] < FRAGMENTS_TO_CRAFT)
- {
- ColorChat(id, "!g%s!n Insuficiente !gfragmente !npentru a crafta o !gcheie!n.", szTag);
- return PLUGIN_HANDLED;
- }
- g_iPlayerData[id][Keys]++;
- g_iPlayerData[id][Fragments] -= FRAGMENTS_TO_CRAFT;
- ColorChat(id, "!g%s!n Ai transformat !g%d!n fragmente intr-o !gcheie!n.", szTag, FRAGMENTS_TO_CRAFT);
- openCaseMenu(id);
- }
- case 2:
- {
- if(g_iPlayerData[id][Points] < KEY_COST)
- {
- ColorChat(id, "!g%s!n Insuficiente !gpuncte !npentru a cumpara o !gcheie!n.", szTag);
- return PLUGIN_HANDLED;
- }
- g_iPlayerData[id][Keys]++;
- g_iPlayerData[id][Points] -= KEY_COST;
- ColorChat(id, "!g%s!n Ai achizitionat o !gcheie!n.", szTag);
- SaveData(id);
- openCaseMenu(id);
- }
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Gift menu */
- public showGiftMenu(id)
- {
- new menu, szText[128], szName[32];
- menu = menu_create("\w[ \yCS:GO OUTSTANDING\w] \yGift \wMenu", "giftMenuHandler");
- if(g_iReceiver[id])
- {
- get_user_name(g_iReceiver[id], szName, charsmax(szName));
- formatex(szText, charsmax(szText), "Jucator: \y%s", szName);
- }
- else formatex(szText, charsmax(szText), "Alege \yjucator\w:");
- menu_additem(menu, szText);
- if(g_iSkinToGift[id] == skinsNum)
- formatex(szText, charsmax(szText), "Alege \ySkin^n");
- else formatex(szText, charsmax(szText), "Skin spre oferire: \y%s^n", g_aSkins[g_iSkinToGift[id]][Name]);
- menu_additem(menu, szText);
- menu_additem(menu, "\rTrimite");
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public giftMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0:
- {
- new iPlayers[32], iNum, idReceiver;
- get_players(iPlayers, iNum);
- idReceiver = iPlayers[g_iIterator[id]]
- g_iReceiver[id] = idReceiver;
- g_iIterator[id]++;
- if(g_iIterator[id] == iNum)
- g_iIterator[id] = 0;
- showGiftMenu(id);
- }
- case 1:
- {
- showSkinsForGift(id);
- }
- case 2:
- {
- if(g_iSkinToGift[id] == skinsNum)
- {
- ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
- showGiftMenu(id)
- return PLUGIN_HANDLED;
- }
- if(g_iReceiver[id] == id)
- {
- ColorChat(id, "!g%s!n Nu iti da !gskinuri !ntie!",szTag);
- showGiftMenu(id)
- return PLUGIN_HANDLED;
- }
- new szName[32];
- get_user_name(id, szName, charsmax(szName));
- g_iPlayerSkins[id][g_iSkinToGift[id]]--;
- g_iPlayerSkins[g_iReceiver[id]][g_iSkinToGift[id]]++;
- ColorChat(g_iReceiver[id], "!g%s!nAi primit !g%s !n de la !g%s!n.", szTag, g_aSkins[g_iSkinToGift[id]][Name], szName);
- g_iSkinToGift[id] = skinsNum;
- SaveData(id);
- SaveData(g_iReceiver[id]);
- }
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Skins List for gift */
- public showSkinsForGift(id)
- {
- new menu, szText[64], k=0;
- menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il daruiesti", "skinsForGiftMenuHandler");
- for(new i; i < skinsNum; i++)
- if(g_iPlayerSkins[id][i])
- {
- formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
- menu_additem(menu, szText);
- g_iSkins[id][k++] = i;
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsForGiftMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- g_iSkinToGift[id] = g_iSkins[id][item];
- showGiftMenu(id);
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Destroy skin menu */
- public showDestroyMenu(id)
- {
- new menu, szText[128];
- menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] \wDestroy \ySkin \wMenu", "destroyMenuHandler");
- if(g_iSkinToDestroy[id] == skinsNum)
- formatex(szText, charsmax(szText), "Alege \ySkin^n");
- else formatex(szText, charsmax(szText), "Skin pentru distrugere: \y%s^n", g_aSkins[g_iSkinToDestroy[id]][Name]);
- menu_additem(menu, szText);
- menu_additem(menu, "\rDistruge");
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public destroyMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0:
- {
- showSkinsForDestroy(id);
- }
- case 1:
- {
- if(g_iSkinToDestroy[id] == skinsNum)
- {
- ColorChat(id, "!g%s!n Alege un !gskin!n!",szTag);
- showDestroyMenu(id)
- return PLUGIN_HANDLED;
- }
- g_iPlayerSkins[id][g_iSkinToDestroy[id]]--;
- g_iPlayerData[id][Fragments]++;
- ColorChat(id, "!g%s!nAi distrus skinul !g%s!n si ai primit un !gfragment !nde !gcheie!n.", szTag, g_aSkins[g_iSkinToDestroy[id]][Name]);
- g_iSkinToDestroy[id] = skinsNum;
- SaveData(id);
- showDestroyMenu(id);
- }
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Skins List to destroy */
- public showSkinsForDestroy(id)
- {
- new menu, szText[64], k=0;
- menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Alege skinul pe care vrei sa il distrugi", "skinsForDestroyMenuHandler");
- for(new i; i < skinsNum; i++)
- if(g_iPlayerSkins[id][i])
- {
- formatex(szText, charsmax(szText), "%s - \y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
- menu_additem(menu, szText);
- g_iSkins[id][k++] = i;
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsForDestroyMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- g_iSkinToDestroy[id] = g_iSkins[id][item];
- showDestroyMenu(id);
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Market menu */
- public cmdShowMarket(id)
- {
- new menu;
- menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Market Shop", "marketMenuHandler");
- menu_additem(menu, "\wCumpara \yskin^n");
- menu_additem(menu, "Adauga \yskin \win market");
- menu_additem(menu, "Retrage \yskin \wdin market");
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public marketMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0: showSkinsInMarketMenu(id);
- case 1: showSkinsToSellMenu(id);
- case 2: showRemoveSkinMenu(id);
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Skins in market */
- public showSkinsInMarketMenu(id)
- {
- new menu, szText[256], szName[32], k=0;
- new iPlayers[32], iNum, idV;
- get_players(iPlayers, iNum);
- menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Skinuri in market", "skinsInMarketMenuHandler");
- for(new i; i < iNum; i++)
- {
- idV = iPlayers[i];
- for(new j; j < skinsNum; j++)
- {
- if(g_iSkinsInMarket[idV][j])
- {
- get_user_name(idV, szName, charsmax(szName));
- formatex(szText, charsmax(szText), "\y%s \w[ \y%d \wpoints \w] [ Vanzator: \y%s \w]", g_aSkins[j][Name], g_iSkinsInMarket[idV][j], szName);
- menu_additem(menu, szText);
- g_iSkins[id][k] = j;
- iSeller[id][k++] = idV;
- }
- }
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsInMarketMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- new szSellerName[32], szName[32];
- new iSkinID = g_iSkins[id][item]
- new iSellerID = iSeller[id][item];
- if(g_iPlayerData[id][Points] < g_iSkinsInMarket[iSellerID][iSkinID])
- {
- ColorChat(id, "!g%s!nPuncte insuficiente pentru a cumpara skinul!", szTag);
- return PLUGIN_HANDLED;
- }
- get_user_name(id, szName, charsmax(szName));
- get_user_name(iSellerID, szSellerName, charsmax(szSellerName));
- g_iPlayerData[id][Points] -= g_iSkinsInMarket[iSellerID][iSkinID];
- g_iPlayerData[iSellerID][Points] += g_iSkinsInMarket[iSellerID][iSkinID];
- g_iPlayerSkins[id][iSkinID]++;
- ColorChat(0, "!g%s!nA fost achizitionat skinul !g%s !nde la !g%s !ncu !g%d !npuncte de catre !g%s!n.", szTag, g_aSkins[iSkinID][Name], szSellerName, g_iSkinsInMarket[iSellerID][iSkinID], szName);
- ColorChat(iSellerID, "!g%s!nTi-a fost achizitionat skinul !g%s !ncu !g%d !npuncte de catre !g%s!n.", szTag, g_aSkins[iSkinID][Name], g_iSkinsInMarket[iSellerID][iSkinID], szName);
- g_iSkinsInMarket[iSellerID][iSkinID] = 0;
- SaveData(id);
- SaveMarket(id);
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Skins to sell */
- public showSkinsToSellMenu(id)
- {
- new menu, szText[128], k=0;
- menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul", "skinsToSellMenuHandler");
- if(!g_iPrice[id])
- formatex(szText, charsmax(szText), "Alege \ypretul^n");
- else
- formatex(szText, charsmax(szText), "\yPret\r: \w%d^n", g_iPrice[id]);
- menu_additem(menu, szText);
- for(new i; i < skinsNum; i++)
- {
- if(g_iPlayerSkins[id][i])
- {
- formatex(szText, charsmax(szText), "\y%s \w- \r*\y%d \wBucati", g_aSkins[i][Name], g_iPlayerSkins[id][i]);
- menu_additem(menu, szText);
- g_iSkins[id][k++] = i;
- }
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsToSellMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- new iSkinID, szName[32];
- get_user_name(id, szName, charsmax(szName));
- if(item == 0)
- {
- client_cmd(id, "messagemode Insert_price");
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- if(!g_iPrice[id])
- {
- ColorChat(id, "!g%s!nNu ai ales inca pretul!", szTag);
- showSkinsToSellMenu(id)
- return PLUGIN_HANDLED
- }
- iSkinID = g_iSkins[id][item-1];
- if(g_iSkinsInMarket[id][iSkinID])
- {
- ColorChat(id, "!g%s!nAi pus deja acest !gskin in !gmarket!n!", szTag);
- showSkinsToSellMenu(id);
- return PLUGIN_HANDLED;
- }
- g_iPlayerSkins[id][iSkinID]--;
- g_iSkinsInMarket[id][iSkinID] = g_iPrice[id];
- ColorChat(id, "!g%s!nAi adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, g_aSkins[iSkinID][Name], g_iPrice[id]);
- ColorChat(0, "!g%s!nJucatorul !g%s !na adaugat skinul !g%s !nin market cu !g%d !npuncte.", szTag, szName, g_aSkins[iSkinID][Name], g_iPrice[id]);
- g_iPrice[id] = 0;
- SaveData(id)
- SaveMarket(id);
- showSkinsToSellMenu(id);
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- public cmdInsertPrice(id)
- {
- new szPrice[8];
- read_args(szPrice, charsmax(szPrice));
- remove_quotes(szPrice);
- new iPrice = str_to_num(szPrice);
- if(!iPrice || iPrice < 0)
- {
- ColorChat(id, "!g%s!nInvalid number, try again!", szTag);
- client_cmd(id, "messagemode Insert_price");
- }
- g_iPrice[id] = iPrice;
- showSkinsToSellMenu(id);
- }
- /* Remove skin from market */
- public showRemoveSkinMenu(id)
- {
- new menu, szText[128], k=0;
- menu = menu_create("\w[ \yCSGO OUTSTANDING \w] Alege skinul pe care doresti sa il retragi", "skinsToRemoveMenuHandler");
- for(new i; i < skinsNum; i++)
- {
- if(g_iSkinsInMarket[id][i])
- {
- formatex(szText, charsmax(szText), "\y%s", g_aSkins[i][Name]);
- menu_additem(menu, szText);
- g_iSkins[id][k++] = i;
- }
- }
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public skinsToRemoveMenuHandler(id, menu, item)
- {
- if(item == MENU_EXIT)
- {
- cmdShowMarket(id);
- return PLUGIN_HANDLED;
- }
- new szName[32], iSkinID;
- get_user_name(id, szName, charsmax(szName));
- iSkinID = g_iSkins[id][item];
- g_iSkinsInMarket[id][iSkinID] = 0;
- g_iPlayerSkins[id][iSkinID]++;
- ColorChat(0, "!g%s!nJucatorul !g%s !na retras skinul !g%s !ndin market.", szTag, szName, g_aSkins[iSkinID][Name]);
- cmdShowMarket(id);
- return PLUGIN_HANDLED;
- }
- /* Games Menu */
- public showGamesMenu(id)
- {
- new menu, szText[64];
- menu = menu_create("\w[ \yCS:GO OUTSTANDING \w] Meniu de \yjocuri", "gamesMenuHandler");
- formatex(szText, charsmax(szText), "Tombola | \y%d \wPuncte", RAFFLE_COST)
- menu_additem(menu, szText);
- menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
- menu_display(id, menu, 0);
- }
- public gamesMenuHandler(id, menu, item)
- {
- if( item == MENU_EXIT )
- {
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- switch(item)
- {
- case 0:
- {
- if(g_iPlayerData[id][Points] < RAFFLE_COST)
- {
- ColorChat(id, "!g%s!nInsuficiente !gpuncte !npentru a juca la tombola", szTag);
- return PLUGIN_HANDLED;
- }
- new szName[32];
- get_user_name(id, szName, charsmax(szName));
- for(new i; i < raffleMembers; i++)
- {
- if(g_iRafflePlayers[i] == id)
- {
- ColorChat(id, "!g%s!nTe-ai inscris deja in tombola runda asta!", szTag);
- return PLUGIN_HANDLED;
- }
- }
- g_iRafflePlayers[raffleMembers++] = id;
- g_iPlayerData[id][Points] -= RAFFLE_COST
- ColorChat(0, "!g%s!nJucatorul !g%s !ns-a inscris in !gtombola!n.Jucatori inscrisi: !g%d!n.", szTag, szName, raffleMembers);
- }
- }
- menu_destroy(menu);
- return PLUGIN_HANDLED;
- }
- /* Round end event */
- public evRoundEnd()
- {
- if(raffleMembers)
- {
- new iRand, szName[32];
- iRand = random(raffleMembers);
- get_user_name(g_iRafflePlayers[iRand], szName, charsmax(szName));
- g_iPlayerData[g_iRafflePlayers[iRand]][Points] += RAFFLE_COST*raffleMembers;
- ColorChat(0, "!g%s!nTombola pe runda aceasta s-a incheiat !", szTag);
- ColorChat(0, "!g%s!nJucatorul !g%s !na avut bulan si a castigat !g%d!n puncte !", szTag, szName, RAFFLE_COST*raffleMembers);
- ColorChat(0, "!g%s!nNu fiti suparati, vorba aia, prost sa fii noroc sa ai !", szTag);
- raffleMembers = 0;
- }
- else
- {
- ColorChat(0, "!g%s!nNiciun jucator !ginscris !nin aceasta runda !", szTag);
- ColorChat(0, "!g%s!nAsteptam extragerea din runda urmatoare !", szTag);
- }
- }
- /* Giving keys when win a round */
- public terroristsWin()
- {
- new iPlayers[32], iNum, id, iRand;
- get_players(iPlayers, iNum, "ae", "TERRORISTS");
- for(new i; i < iNum; i++)
- {
- id = iPlayers[i];
- iRand = random_num(1, 100);
- if(iRand <= DROP_FRAGMENTS_CHANCE)
- {
- g_iPlayerData[id][Fragments]++;
- ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
- SaveData(id);
- }
- }
- }
- public ctsWin()
- {
- new iPlayers[32], iNum, id, iRand;
- get_players(iPlayers, iNum, "ae", "CT");
- for(new i; i < iNum; i++)
- {
- id = iPlayers[i];
- iRand = random_num(1, 100);
- if(iRand <= DROP_FRAGMENTS_CHANCE)
- {
- g_iPlayerData[id][Fragments]++;
- ColorChat(id, "!g%s!nFelicitari, ai primit un !gfragment !nde cheie !", szTag);
- SaveData(id);
- }
- }
- }
- public hamAddWeaponToPlayer(ent, id)
- {
- if(!is_valid_ent(ent) || !is_user_connected(id))
- return HAM_IGNORED;
- for (new i; i < skinsNum; i++) {
- if(entity_get_int(ent, EV_INT_WEAPONKEY) == 500+i)
- {
- entity_set_int(ent, EV_INT_WEAPONKEY, 0);
- g_iShowedSkin[id][g_aSkins[i][Type]] = i;
- return HAM_HANDLED;
- }
- }
- return HAM_IGNORED;
- }
- public fwSetModel(entity, model[])
- {
- if(!is_valid_ent(entity))
- return FMRES_IGNORED;
- static szClassName[33];
- entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName));
- if(!equal(szClassName, "weaponbox"))
- return FMRES_IGNORED;
- static iOwner;
- new szModels[][][] = {
- {"models/w_ak47.mdl", "weapon_ak47" },
- {"models/w_m4a1.mdl", "weapon_m4a1" },
- {"models/w_awp.mdl", "weapon_awp" }
- }
- new iWeapons[] = {
- CSW_AK47,
- CSW_M4A1,
- CSW_AWP
- }
- iOwner = entity_get_edict(entity, EV_ENT_owner);
- for(new i; i < sizeof(szModels); i++)
- if(equal(model, szModels[i][0]))
- {
- static iStoredAugID;
- iStoredAugID = find_ent_by_owner(ENG_NULLENT, szModels[i][1], entity);
- if(!is_valid_ent(iStoredAugID))
- return FMRES_IGNORED;
- entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, 500+g_iShowedSkin[iOwner][iWeapons[i]]);
- entity_set_model(entity, szModels[i][0]);
- return FMRES_SUPERCEDE;
- }
- return FMRES_IGNORED;
- }
- /* Save & Load Data */
- public SaveData(id)
- {
- new iVault = nvault_open("CSGOData2");
- new szName[32], szData[256];
- get_user_name(id, szName, charsmax(szName));
- formatex(szData, charsmax(szData), "%i#%i#%i#%i", g_iPlayerData[id][Points], g_iPlayerData[id][Case], g_iPlayerData[id][Keys], g_iPlayerData[id][Fragments]);
- for(new i; i < skinsNum; i++)
- format(szData, charsmax(szData), "%s#%i", szData, g_iPlayerSkins[id][i]);
- nvault_set(iVault, szName, szData);
- nvault_close(iVault);
- }
- public LoadData(id)
- {
- new iVault = nvault_open("CSGOData2");
- if(iVault == INVALID_HANDLE) {
- log_amx("ERROR: Unable to open vault file %s", "CSGOData2");
- return PLUGIN_HANDLED;
- }
- new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX], iTimestamp;
- get_user_name(id, szName, charsmax(szName));
- if(nvault_lookup(iVault, szName, szData, charsmax(szData), iTimestamp))
- {
- /* +4 because we must load points keys case and fragments */
- for(new i; i < skinsNum + 4; i ++)
- {
- strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
- iArg[i] = str_to_num(szArg[i]);
- }
- g_iPlayerData[id][Points] = iArg[0];
- g_iPlayerData[id][Case] = iArg[1];
- g_iPlayerData[id][Keys] = iArg[2];
- g_iPlayerData[id][Fragments] = iArg[3];
- for(new i; i < skinsNum; i++)
- g_iPlayerSkins[id][i] = iArg[i+4]; /* +4 because we loaded points keys case and fragments */
- }
- else
- {
- g_iPlayerData[id][Points] = 15;
- g_iPlayerData[id][Case] = 1;
- g_iPlayerData[id][Keys] = 1;
- g_iPlayerData[id][Fragments] = 0;
- for(new i; i < skinsNum; i++)
- g_iPlayerSkins[id][i] = 0;
- }
- nvault_close(iVault);
- return PLUGIN_CONTINUE;
- }
- /* Save & Load Market */
- public SaveMarket(id)
- {
- new iVault = nvault_open("CSGOMarket");
- new szName[32], szData[256];
- get_user_name(id, szName, charsmax(szName));
- for(new i; i < skinsNum; i++)
- format(szData, charsmax(szData), "%s#%i", szData, g_iSkinsInMarket[id][i]);
- nvault_set(iVault, szName, szData);
- nvault_close(iVault);
- }
- public LoadMarket(id)
- {
- new iVault = nvault_open("CSGOMarket");
- new szName[32], szData[256], szArg[SKINS_MAX][9], iArg[SKINS_MAX];
- get_user_name(id, szName, charsmax(szName));
- nvault_get(iVault, szName, szData, charsmax(szData));
- for(new i; i < skinsNum; i ++)
- {
- strtok(szData, szArg[i], charsmax(szArg[]), szData, charsmax(szData), '#');
- iArg[i] = str_to_num(szArg[i]);
- }
- for(new i; i < skinsNum; i++)
- g_iSkinsInMarket[id][i] = iArg[i];
- nvault_close(iVault);
- }
- /* ColorChat */
- stock ColorChat(const id,const input[], any:...) {
- new iNum = 1, iPlayers[32];
- static szMessage[191];
- vformat(szMessage, charsmax(szMessage),input, 3);
- replace_all(szMessage, charsmax(szMessage), "!g", "^4");
- replace_all(szMessage, charsmax(szMessage), "!n", "^1");
- replace_all(szMessage, charsmax(szMessage), "!t", "^3");
- if(id) iPlayers[0] = id;
- else get_players(iPlayers, iNum, "ch");
- for(new i = 0; i < iNum; i++)
- {
- if(is_user_connected(iPlayers[i]))
- {
- message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i]);
- write_byte(iPlayers[i]);
- write_string(szMessage);
- message_end();
- }
- }
- }
- // Get Weapon Entity's Owner
- stock fm_cs_get_weapon_ent_owner(ent)
- {
- // Prevent server crash if entity's private data not initalized
- if (pev_valid(ent) != 2) return -1;
- return get_pdata_cbase(ent, 41, 4);
- }
- stock user_have_skins(id) {
- new ok = 0;
- for (new i; i < skinsNum; i++) {
- if (g_iPlayerSkins[id][i] > 0) {
- ok = 1;
- }
- }
- return ok;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement