Siemano. Mógłby ktoś usunąć prefixy przed nickiem na sayu? Wszystkie, które dotyczą tego pluginu. Wygląda to badziewnie a przez ten plugin prefix vipa traci kolor, tak samo jak kolor nicku robi sie zolty.. Chciałbym z tego całkowicie zrezygnować, aby nie gryzlo sie to z vipem.
Z góry dzięki.
#include <amxmodx> #include <hamsandwich> #include <fakemeta> #include <nvault> #include <colorchat> #include <codmod> #define MAX_MEMBERS 20 //Maksymalna ilosc czlonkow w grupie #define REQUIRED_LEVEL 40 //Od ktorego poziomu mozna zakladac grupe //#define DATA_VALIDITY 30 //Po ilu dniach nie grania wlasciciela, jego grupa ma byc usunieta //Jezeli chcesz wylaczyc auto-czyszczenie pliku vault - zakomentuj linie wyzej #define TO_ADD 0 #define XP 1 #define ATTACK 2 #define DEFENSE 3 new Array:g_szGroupName; new Array:g_szGroupOwner, Array:g_szGroupMembers[MAX_MEMBERS]; new Array:g_iGroupExperience, Array:g_iGroupLevel; new Array:g_iGroupAdditionalPoints[4]; new Array:g_iGroupMembersCount; new g_szTop15Motd[2000]; new g_iGroupsCount; new g_iPlayerGroup[33], g_iIsGroupOwner[33]; new g_szPlayerName[33][64]; new g_iLastQuestioner[33]; new g_iExpForKill; new g_iHud, g_msgStatusText, g_iSlotsCount; new g_iVault, g_iVault2; public plugin_init() { register_plugin("Nowy System Grup", "1.1.1b", "d0naciak"); g_szGroupName = ArrayCreate(20, 50); g_szGroupOwner = ArrayCreate(64, 50); for(new i = 0; i < MAX_MEMBERS; i++) g_szGroupMembers[i] = ArrayCreate(64, 50); g_iGroupExperience = ArrayCreate(1, 50); g_iGroupLevel = ArrayCreate(1, 50); g_iGroupMembersCount = ArrayCreate(1, 50); for(new i = 0; i < 4; i++) g_iGroupAdditionalPoints[i] = ArrayCreate(1, 50); RegisterHam(Ham_Spawn, "player", "fw_Spawn_Post", 1); RegisterHam(Ham_Killed, "player", "fw_Killed_Post", 1); RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage"); register_message(get_user_msgid("SayText"),"msg_SayText"); register_clcmd("WpiszNazweGrupy", "GroupNameWrited"); register_clcmd("say /grupa", "GroupMenu"); delete_file("addons/amxmodx/data/vault/CG_PlayersData.vault"); g_iVault = nvault_open("CG_GroupsData"); g_iVault2 = nvault_open("CG_PlayersData"); for(new i = 0; ReadGroupData(i); i++) g_iGroupsCount++; /* #if defined DATA_VALIDITY new szTime[3]; get_time("%H", szTime, 2); if(szTime[0] == '1' && szTime[1] == '2') for(new i = g_iGroupsCount - 1; i >= 0; i--) ClearGroupData(i); #endif */ g_iHud = CreateHudSyncObj(); g_msgStatusText = get_user_msgid("StatusText"); g_iSlotsCount = get_maxplayers(); } public plugin_cfg() { FormatTop15(); g_iExpForKill = get_cvar_num("cod_killxp"); } public plugin_end() { for(new i = 0; i < g_iGroupsCount; i++) SaveGroupData(i); nvault_close(g_iVault); nvault_close(g_iVault2); ArrayDestroy(g_szGroupName); ArrayDestroy(g_szGroupOwner); for(new i = 0; i < MAX_MEMBERS; i++) ArrayDestroy(g_szGroupMembers[i]); ArrayDestroy(g_iGroupExperience); ArrayDestroy(g_iGroupLevel); ArrayDestroy(g_iGroupMembersCount); for(new i = 0; i < 4; i++) ArrayDestroy(g_iGroupAdditionalPoints[i]); } public msg_SayText(iMsgId, iMsgDest, iMsgEnt) { new id = get_msg_arg_int(1); if(!is_user_connected(id)) return PLUGIN_CONTINUE; new iGroup = g_iPlayerGroup[id]; if(iGroup == -1) return PLUGIN_CONTINUE; new szTmp[256],szTmp2[256], szPrefix[64]; get_msg_arg_string(2, szTmp, 255); ArrayGetString(g_szGroupName, iGroup, szPrefix, 63); if(!equal(szTmp,"#Cstrike_Chat_All")){ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2)," "); add(szTmp2,charsmax(szTmp2),szTmp); } else{ add(szTmp2,charsmax(szTmp2),szPrefix); add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 : %s2"); } set_msg_arg_string(2,szTmp2); return PLUGIN_CONTINUE; } public client_authorized(id) { get_user_name(id, g_szPlayerName[id], 63); g_iPlayerGroup[id] = -1; g_iIsGroupOwner[id] = 0; ReadUserData(id); } public client_disconnect(id) { SaveUserData(id); g_iLastQuestioner[id] = 0; } public fw_Spawn_Post(id) { if(!is_user_connected(id)) return HAM_IGNORED; new iGroup = g_iPlayerGroup[id]; if(iGroup != -1) { if(g_iIsGroupOwner[id] && ArrayGetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup)) DealPoints(id); set_task(1.0, "UpdateInfo", id); } return HAM_IGNORED; } public fw_Killed_Post(iVictim, iKiller) { if(!is_user_connected(iKiller) || get_user_team(iKiller) == get_user_team(iVictim) || g_iPlayerGroup[iKiller] == -1) return HAM_IGNORED; new iExpForKill = g_iExpForKill, iExpToAdd = iExpForKill, iGroup = g_iPlayerGroup[iKiller], iXpPoints = ArrayGetCell(g_iGroupAdditionalPoints[XP], iGroup); if(iXpPoints) iExpToAdd += floatround(iExpForKill * iXpPoints * 0.025); if(cod_get_user_level(iVictim) > cod_get_user_level(iKiller)) iExpToAdd += (cod_get_user_level(iVictim)-cod_get_user_level(iKiller))*(iExpForKill/10); ArraySetCell(g_iGroupExperience, iGroup, ArrayGetCell(g_iGroupExperience, iGroup) + iExpToAdd); set_hudmessage(255, 255, 0, -1.0, 0.2, 0, 3.0, 3.0, _, _, -1); ShowSyncHudMsg(iKiller, g_iHud, "XP Grupy: +%d", iExpToAdd); CheckLevel(iGroup); return HAM_IGNORED; } public fw_TakeDamage(id, iEnt, iAttacker, Float:fDamage, iDamageBits) { if(!is_user_connected(iAttacker) || get_user_team(id) == get_user_team(iAttacker) || !(iDamageBits & (1<<1))) return HAM_IGNORED; if(g_iPlayerGroup[id] != -1) { new iDefensePoints = ArrayGetCell(g_iGroupAdditionalPoints[DEFENSE], g_iPlayerGroup[id]); if(iDefensePoints) { SetHamParamFloat(4, fDamage - fDamage * iDefensePoints * 0.01); return HAM_HANDLED; } } if(g_iPlayerGroup[iAttacker] != -1) { new iAttackPoints = ArrayGetCell(g_iGroupAdditionalPoints[ATTACK], g_iPlayerGroup[iAttacker]); if(iAttackPoints) { SetHamParamFloat(4, fDamage + fDamage * iAttackPoints * 0.01); return HAM_HANDLED; } } return HAM_IGNORED; } public GroupMenu(id) { new iMenu = menu_create("GroupsSystem by \rd0naciak", "GroupMenu_Handler"); menu_additem(iMenu, "Stworz grupe"); menu_additem(iMenu, "Zniszcz grupe"); menu_additem(iMenu, "Wyjdz z grupy"); menu_addblank(iMenu, 0); menu_additem(iMenu, "Dodaj czlonkow"); menu_additem(iMenu, "Wyrzuc czlonkow"); menu_addblank(iMenu, 0); menu_additem(iMenu, "Punkty grupy"); menu_additem(iMenu, "Resetuj punkty grupy"); menu_addblank(iMenu, 0); menu_additem(iMenu, "Lista grup"); menu_additem(iMenu, "\rTop 15 grup"); menu_additem(iMenu, "Informacje o mojej grupie"); //menu_addblank(iMenu, 0); //menu_additem(iMenu, "Co to grupy?"); //menu_setprop(iMenu, MPROP_PERPAGE, 0); menu_display(id, iMenu); return PLUGIN_HANDLED; } public GroupMenu_Handler(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iItem == MENU_BACK) return PLUGIN_CONTINUE; switch(iItem) { case 0: CreateGroup(id); case 1: DeleteGroup(id); case 2: LeaveFromGroup(id); case 3: AddMember(id); case 4: KickMember(id); case 5: DealPoints(id); case 6: ResetPoints(id); case 7: ListOfGroups(id); case 8: ShowTop15(id); case 9: GroupInfo(id); //case 10: show_motd(id, "GroupInfo.txt", "Co to grupy?"); } menu_destroy(iMenu); return PLUGIN_CONTINUE; } public CreateGroup(id) { if(g_iPlayerGroup[id] != -1) { print_msg(id, "Jestes juz w grupie!"); return PLUGIN_CONTINUE; } if(cod_get_user_level(id) < REQUIRED_LEVEL) { print_msg(id, "Zakladanie grupy jest dostepne od %dLv", REQUIRED_LEVEL); return PLUGIN_CONTINUE; } client_cmd(id, "messagemode WpiszNazweGrupy"); print_msg(id, "Wszystko dobrze, wpisz teraz nazwe grupy."); return PLUGIN_CONTINUE; } public GroupNameWrited(id) { if(g_iPlayerGroup[id] != -1) { print_msg(id, "Jestes juz w grupie!"); return PLUGIN_HANDLED; } new szGroupName[20]; read_argv(1, szGroupName, 20); g_iPlayerGroup[id] = g_iGroupsCount; g_iIsGroupOwner[id] = 1; ArrayPushCell(g_iGroupLevel, 1); ArrayPushCell(g_iGroupExperience, 0); ArrayPushCell(g_iGroupMembersCount, 1); for(new i = 1; i < MAX_MEMBERS; i++) ArrayPushString(g_szGroupMembers[i], ""); for(new i = 0; i < 4; i++) ArrayPushCell(g_iGroupAdditionalPoints[i], 0); ArrayPushString(g_szGroupName, szGroupName); ArrayPushString(g_szGroupOwner, g_szPlayerName[id]); g_iGroupsCount++; UpdateInfo(id); print_msg(id, "Grupa^x03 %s^x01 zostala zalozona.", szGroupName); return PLUGIN_HANDLED; } public AddMember(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel moze dodawac czlonkow do grupy!"); return PLUGIN_CONTINUE; } if(ArrayGetCell(g_iGroupMembersCount, g_iPlayerGroup[id]) >= MAX_MEMBERS) { print_msg(id, "Przekroczono limit maksymalnej ilosci czlonkow!"); return PLUGIN_CONTINUE; } new iMenu = menu_create("Dodaj czlonka", "AddMember_Handle"); for(new iPlayers = 1; iPlayers <= g_iSlotsCount; iPlayers++) { if(!is_user_connected(iPlayers) || g_iPlayerGroup[iPlayers] != -1) continue; menu_additem(iMenu, g_szPlayerName[iPlayers], g_szPlayerName[iPlayers]); } menu_display(id, iMenu); return PLUGIN_CONTINUE; } public AddMember_Handle(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iItem < 0) return PLUGIN_CONTINUE; if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel moze dodawac czlonkow!"); return PLUGIN_CONTINUE; } new szData[64], iAccess; menu_item_getinfo(iMenu, iItem, iAccess, szData, 63, _, _, iAccess); new iNewMember = get_user_index(szData); if(!is_user_connected(iNewMember)) { print_msg(id, "Nie znaleziono^x03 %s!", szData); menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(g_iPlayerGroup[iNewMember] != -1) { print_msg(id, "Gracz^x03 %s^x01 jest juz w grupie!", szData); menu_destroy(iMenu); return PLUGIN_CONTINUE; } g_iLastQuestioner[iNewMember] = id; AskPlayer(iNewMember, g_iPlayerGroup[id]); menu_destroy(iMenu); return PLUGIN_CONTINUE; } public AskPlayer(id, iGroup) { new szTitle[60], szGroupName[20]; ArrayGetString(g_szGroupName, iGroup, szGroupName, 19); formatex(szTitle, 59, "Chcesz dolaczyc do \y%s\w?", szGroupName); new iMenu = menu_create(szTitle, "AskPlayer_Handler"); menu_additem(iMenu, "Tak"); menu_additem(iMenu, "Nie"); menu_display(id, iMenu); } public AskPlayer_Handler(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } new iOwner = g_iLastQuestioner[id]; if(!g_iIsGroupOwner[iOwner]) { print_msg(id, "Wlasciciel opuscil grupe!"); return PLUGIN_CONTINUE; } if(iItem == 0) { new iGroup = g_iPlayerGroup[id] = g_iPlayerGroup[iOwner]; new iMembersCount = ArrayGetCell(g_iGroupMembersCount, iGroup); ArraySetString(g_szGroupMembers[iMembersCount], iGroup, g_szPlayerName[id]); ArraySetCell(g_iGroupMembersCount, iGroup, iMembersCount + 1); UpdateInfo(id); print_msg(iOwner, "Gracz^x03 %s^x01 dolaczyl do grupy.", g_szPlayerName[id]); } else print_msg(iOwner, "Gracz^x03 %s^x01 odrzucil zaproszenie grupy.", g_szPlayerName[id]); menu_destroy(iMenu); return PLUGIN_CONTINUE; } public KickMember(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel usuwac z grupy!"); return PLUGIN_CONTINUE; } new iMenu = menu_create("Wywalaj z grupy", "KickMember_Handler"), szMemberName[64]; new iGroup = g_iPlayerGroup[id]; for(new i = 1; i < ArrayGetCell(g_iGroupMembersCount, iGroup); i++) { ArrayGetString(g_szGroupMembers[i], iGroup, szMemberName, 63); menu_additem(iMenu, szMemberName, szMemberName); } menu_display(id, iMenu); return PLUGIN_CONTINUE; } public KickMember_Handler(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iItem < 0) return PLUGIN_CONTINUE; new szData[64], iAccess, iCallBack; menu_item_getinfo(iMenu, iItem, iAccess, szData, 63, _, _, iCallBack); new iEjected = get_user_index(szData); new iGroup = g_iPlayerGroup[id]; if(iEjected && g_iPlayerGroup[iEjected] != iGroup) { print_msg(id, "Tego gracza nie ma w grupie!"); menu_destroy(iMenu); return PLUGIN_CONTINUE; } new iMembersCount = ArrayGetCell(g_iGroupMembersCount, iGroup), iMemberId, szGroupMemberName[64], szVaultKey[128]; if(iEjected) { g_iPlayerGroup[iEjected] = -1; UpdateInfo(id); UpdateInfo(iEjected); print_msg(iEjected, "Zostales wyrzucony z grupy..."); } formatex(szVaultKey, 127, "%s-PlayerData", szData); nvault_remove(g_iVault2, szVaultKey); for(new i = 1; i < iMembersCount; i++) { ArrayGetString(g_szGroupMembers[i], iGroup, szGroupMemberName, 63); if(equal(szData, szGroupMemberName)) { iMemberId = i; break; } } if(iMemberId+1 < iMembersCount) { for(new i = iMemberId+1; i < MAX_MEMBERS; i++) { ArrayGetString(g_szGroupMembers[i], iGroup, szGroupMemberName, 63); if(!szGroupMemberName[0]) { ArraySetString(g_szGroupMembers[i-1], iGroup, ""); break; } ArraySetString(g_szGroupMembers[i-1], iGroup, szGroupMemberName); } } else ArraySetString(g_szGroupMembers[iMemberId], iGroup, ""); iMembersCount--; ArraySetCell(g_iGroupMembersCount, iGroup, iMembersCount); print_msg(id, "Gracz^x03 %s wyszedl z grupy.", szData); menu_destroy(iMenu); return PLUGIN_CONTINUE; } public DealPoints(id) { new iGroup = g_iPlayerGroup[id]; if(iGroup == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel moze rozdawac punkty!"); return PLUGIN_CONTINUE; } new szFormat[101], iPoints; iPoints = ArrayGetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup); formatex(szFormat, 100, "Rozdaj punkty \r(%d)", iPoints); new iMenu = menu_create(szFormat, "DealPoints_Handler"); iPoints = ArrayGetCell(g_iGroupAdditionalPoints[XP], iGroup); formatex(szFormat, 100, "Exp \r[%d] \y(Wiecej XP za zabojstwo)", iPoints); menu_additem(iMenu, szFormat); iPoints = ArrayGetCell(g_iGroupAdditionalPoints[ATTACK], iGroup); formatex(szFormat, 100, "Atak \r[%d] \y(Wiecej zadanych obrazen)", iPoints); menu_additem(iMenu, szFormat); iPoints = ArrayGetCell(g_iGroupAdditionalPoints[DEFENSE], iGroup); formatex(szFormat, 100, "Obrona \r[%d] \y(Mniej otrzymanych obrazen)", iPoints); menu_additem(iMenu, szFormat); menu_display(id, iMenu); return PLUGIN_CONTINUE; } public DealPoints_Handler(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iItem < 0) return PLUGIN_CONTINUE; new iGroup = g_iPlayerGroup[id]; new iWhatAdd = iItem + 1, iStatisticPoints, iPointsToAdd; iStatisticPoints = ArrayGetCell(g_iGroupAdditionalPoints[iWhatAdd], iGroup); iPointsToAdd = ArrayGetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup); if(!iPointsToAdd) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iStatisticPoints < 40) { ArraySetCell(g_iGroupAdditionalPoints[iWhatAdd], iGroup, iStatisticPoints + 1); iPointsToAdd -= 1; } else print_msg(id, "Maksymalna ilosc punktow zostala osiagnieta!"); ArraySetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup, iPointsToAdd); menu_destroy(iMenu); if(iPointsToAdd) DealPoints(id); return PLUGIN_CONTINUE; } public ResetPoints(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel moze resetowac punkty grupy!"); return PLUGIN_CONTINUE; } new iGroup = g_iPlayerGroup[id]; if(ArrayGetCell(g_iGroupLevel, iGroup) <= 1) { print_msg(id, "Nie posiadasz zadnych punktow!"); return PLUGIN_CONTINUE; } for(new i = 1; i <= 3; i++) ArraySetCell(g_iGroupAdditionalPoints[i], iGroup, 0); ArraySetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup, (ArrayGetCell(g_iGroupLevel, iGroup)-1)*2); DealPoints(id); return PLUGIN_CONTINUE; } public ListOfGroups(id) { new szGroupName[20], iMenu = menu_create("Lista wszytkich grup", "ListOfGroups_Handler"); for(new i = 0; i < g_iGroupsCount; i++) { ArrayGetString(g_szGroupName, i, szGroupName, 19); menu_additem(iMenu, szGroupName); } menu_display(id, iMenu); } public ListOfGroups_Handler(id, iMenu, iItem) { if(iItem == MENU_EXIT) { menu_destroy(iMenu); return PLUGIN_CONTINUE; } if(iItem < 0) return PLUGIN_CONTINUE; new iGroup = iItem; new szGroupName[64], szGroupMemberName[64], iMembersCount, szInfo[512], iLen; if(!(0 <= iGroup <= g_iGroupsCount-1)) { print_msg(id, "Dana grupa przestala istniec!"); return PLUGIN_CONTINUE; } ArrayGetString(g_szGroupName, iGroup, szGroupName, 19); ArrayGetString(g_szGroupOwner, iGroup, szGroupMemberName, 63); iMembersCount = ArrayGetCell(g_iGroupMembersCount, iGroup); iLen = formatex(szInfo, 511, "Grupa: \y%s^n", szGroupName); iLen += formatex(szInfo[iLen], 511-iLen, "\wWlasciciel: \y%s^n", szGroupMemberName); iLen += formatex(szInfo[iLen], 511-iLen, "\wPoziom: \y%d^n\wDoswiadczenie: \y%d^n", ArrayGetCell(g_iGroupLevel, iGroup), ArrayGetCell(g_iGroupExperience, iGroup)); if(iMembersCount > 1) { iLen += formatex(szInfo[iLen], 511-iLen, "\d================^n"); iLen += formatex(szInfo[iLen], 511-iLen, "\wRazem jest ich \y%d:^n", iMembersCount); for(new iMember = 1; iMember < iMembersCount; iMember++) { ArrayGetString(g_szGroupMembers[iMember], iGroup, szGroupMemberName, 63); iLen += formatex(szInfo[iLen], 511-iLen, "\wGracz: \y%s^n", szGroupMemberName); } } show_menu(id, 1023, szInfo); menu_destroy(iMenu); return PLUGIN_CONTINUE; } public ShowTop15(id) show_motd(id, g_szTop15Motd, "Top 15"); public GroupInfo(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } new iGroup = g_iPlayerGroup[id]; new szGroupName[20], szGroupMemberName[64], iMembersCount, szInfo[512], iLen; ArrayGetString(g_szGroupName, iGroup, szGroupName, 19); ArrayGetString(g_szGroupOwner, iGroup, szGroupMemberName, 63); iMembersCount = ArrayGetCell(g_iGroupMembersCount, iGroup); iLen = formatex(szInfo, 511, "Grupa: \y%s^n", szGroupName); iLen += formatex(szInfo[iLen], 511-iLen, "\wWlasciciel: \y%s^n", szGroupMemberName); iLen += formatex(szInfo[iLen], 511-iLen, "\wPoziom: \y%d^n\wDoswiadczenie: \y%d^n", ArrayGetCell(g_iGroupLevel, iGroup), ArrayGetCell(g_iGroupExperience, iGroup)); if(iMembersCount > 1) { iLen += formatex(szInfo[iLen], 511-iLen, "\d================^n"); iLen += formatex(szInfo[iLen], 511-iLen, "\wRazem jest Was \y%d:^n", iMembersCount); for(new iMember = 1; iMember < iMembersCount; iMember++) { ArrayGetString(g_szGroupMembers[iMember], iGroup, szGroupMemberName, 63); iLen += formatex(szInfo[iLen], 511-iLen, "\wGracz: \y%s^n", szGroupMemberName); } } show_menu(id, 1023, szInfo); return PLUGIN_CONTINUE; } public DeleteGroup(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(!g_iIsGroupOwner[id]) { print_msg(id, "Tylko wlasciciel moze niszczyc grupe!"); return PLUGIN_CONTINUE; } new iGroup = g_iPlayerGroup[id]; new iPlayer, szGroupMemberName[64], szVaultKey[128], szVaultData[14], szPlayerGroup[5], iDistrPos; for(new iMember = 1; iMember < ArrayGetCell(g_iGroupMembersCount, iGroup); iMember++) { ArrayGetString(g_szGroupMembers[iMember], iGroup, szGroupMemberName, 63); iPlayer = get_user_index(szGroupMemberName); if(iPlayer) { g_iPlayerGroup[iPlayer] = -1; UpdateInfo(iPlayer); print_msg(iPlayer, "Grupa do ktorej nalezales zostala zniszczona!"); } formatex(szVaultKey, 127, "%s-PlayerData", szGroupMemberName); nvault_remove(g_iVault2, szVaultKey); } for(new iGroups = iGroup+1; iGroups < g_iGroupsCount; iGroups++) { for(new iMember = 1; iMember < ArrayGetCell(g_iGroupMembersCount, iGroups); iMember++) { ArrayGetString(g_szGroupMembers[iMember], iGroups, szGroupMemberName, 63); iPlayer = get_user_index(szGroupMemberName); if(iPlayer) g_iPlayerGroup[iPlayer]--; else { formatex(szVaultKey, 127, "%s-PlayerData", szGroupMemberName); nvault_get(g_iVault2, szVaultKey, szVaultData, 13); iDistrPos = contain(szVaultData, "#"); copy(szVaultData[iDistrPos], 13 - iDistrPos, ""); copy(szPlayerGroup, 4, szVaultData); formatex(szVaultData, 13, "%d#0", str_to_num(szPlayerGroup)-1); nvault_set(g_iVault2, szVaultKey, szVaultData); } } ArrayGetString(g_szGroupOwner, iGroups, szGroupMemberName, 63); iPlayer = get_user_index(szGroupMemberName); if(iPlayer) { g_iPlayerGroup[iPlayer]--; } else { formatex(szVaultKey, 127, "%s-PlayerData", szGroupMemberName); nvault_get(g_iVault2, szVaultKey, szVaultData, 13); iDistrPos = contain(szVaultData, "#"); copy(szVaultData[iDistrPos], 13-iDistrPos, ""); copy(szPlayerGroup, 4, szVaultData); formatex(szVaultData, 13, "%d#1", str_to_num(szPlayerGroup)-1); nvault_set(g_iVault2, szVaultKey, szVaultData); } } g_iPlayerGroup[id] = -1; g_iIsGroupOwner[id] = 0; formatex(szVaultKey, 127, "%s-PlayerData", g_szPlayerName[id]); nvault_remove(g_iVault2, szVaultKey); ArrayDeleteItem(g_szGroupOwner, iGroup); ArrayDeleteItem(g_szGroupName, iGroup); for(new i = 0; i < 4; i++) ArrayDeleteItem(g_iGroupAdditionalPoints[i], iGroup); for(new i = 1; i < MAX_MEMBERS; i++) ArrayDeleteItem(g_szGroupMembers[i], iGroup); ArrayDeleteItem(g_iGroupMembersCount, iGroup); ArrayDeleteItem(g_iGroupExperience, iGroup); ArrayDeleteItem(g_iGroupLevel, iGroup); g_iGroupsCount--; UpdateInfo(id); print_msg(id, "Grupa zostala zniszczona!"); return PLUGIN_CONTINUE; } public LeaveFromGroup(id) { if(g_iPlayerGroup[id] == -1) { print_msg(id, "Nie jestes w grupie!"); return PLUGIN_CONTINUE; } if(g_iIsGroupOwner[id]) { print_msg(id, "Wlasciciel moze tylko usuwac grupe!"); return PLUGIN_CONTINUE; } new iGroup = g_iPlayerGroup[id]; new iMembersCount = ArrayGetCell(g_iGroupMembersCount, iGroup), iMemberId, szGroupName[20], szGroupMemberName[64], szVaultKey[128]; for(new i = 1; i < iMembersCount; i++) { ArrayGetString(g_szGroupMembers[i], iGroup, szGroupMemberName, 63); if(equal(g_szPlayerName[id], szGroupMemberName)) { iMemberId = i; break; } } if(iMemberId+1 < iMembersCount) { for(new i = iMemberId+1; i < MAX_MEMBERS; i++) { ArrayGetString(g_szGroupMembers[i], iGroup, szGroupMemberName, 63); if(!szGroupMemberName[0]) { ArraySetString(g_szGroupMembers[i-1], iGroup, ""); break; } ArraySetString(g_szGroupMembers[i-1], iGroup, szGroupMemberName); } } else ArraySetString(g_szGroupMembers[iMemberId], iGroup, ""); iMembersCount--; ArraySetCell(g_iGroupMembersCount, iGroup, iMembersCount); formatex(szVaultKey, 127, "%s-PlayerData", g_szPlayerName[id]); nvault_remove(g_iVault2, szVaultKey); g_iPlayerGroup[id] = -1; ArrayGetString(g_szGroupName, iGroup, szGroupName, 19); UpdateInfo(id); print_msg(id, "Wyszles z grupy^x03 %s^x01.", szGroupName); return PLUGIN_CONTINUE; } public CheckLevel(iGroup) { if(ArrayGetCell(g_iGroupLevel, iGroup) >= 61) return PLUGIN_CONTINUE; while(ArrayGetCell(g_iGroupExperience, iGroup) >= WriteLevelExp(ArrayGetCell(g_iGroupLevel, iGroup))) { new id; ArraySetCell(g_iGroupLevel, iGroup, ArrayGetCell(g_iGroupLevel, iGroup) + 1); ArraySetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup, ArrayGetCell(g_iGroupAdditionalPoints[TO_ADD], iGroup) + 2); for(new i = 1; i <= g_iSlotsCount; i++) { if(!is_user_connected(i) || g_iPlayerGroup[i] != iGroup) continue; set_hudmessage(252, 252, 0, -1.0, 0.23, 0, 0.0, 1.1, 0.0, 0.0, -1); ShowSyncHudMsg(id, g_iHud, "Twoja grupa awansowala do %d poziomu!", ArrayGetCell(g_iGroupLevel, iGroup)); } } for(new i = 1; i <= g_iSlotsCount; i++) { if(!is_user_connected(i) || g_iPlayerGroup[i] != iGroup) continue; UpdateInfo(i); } return PLUGIN_CONTINUE; } public UpdateInfo(id) { if(g_iPlayerGroup[id] != -1) { static iGroup, iLevel, Float:fPercentExp, szGroupName[20], szInfo[512]; iGroup = g_iPlayerGroup[id]; iLevel = ArrayGetCell(g_iGroupLevel, iGroup); fPercentExp = float(ArrayGetCell(g_iGroupExperience, iGroup) - WriteLevelExp(iLevel-1)) / float(WriteLevelExp(iLevel) - WriteLevelExp(iLevel-1)) * 100.0; ArrayGetString(g_szGroupName, iGroup, szGroupName, 19); formatex(szInfo, 511, "Grupa : %s | Poziom: %d | Exp: %0.1f%%", szGroupName, iLevel, fPercentExp); message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id); write_byte(0); write_string(szInfo); message_end(); } else { message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id); write_byte(0); write_string(""); message_end(); } } public FormatTop15() { new iRankExp, iLastGroup, iRankedGroups, iMaxRank = (g_iGroupsCount > 15) ? 15 : g_iGroupsCount, iLen; new szGroupName[20], szGroupOwnerName[64]; iLen = formatex(g_szTop15Motd, 1999, "<body bgcolor=#000000><font color=#FFB000><pre>"); iLen += formatex(g_szTop15Motd[iLen], 1999 - iLen, "%2s. %22.22s | %6s | %13s | %22.22s | %12s | %12s | %12s^n", "#", "Nazwa grupy", "Poziom", "Doswiadczenie", "Wlasciciel", "Pkt. XP", "Pkt. Ataku", "Pkt. Obrony"); for(new i = 0; i <= iMaxRank-1; i++) { for(new j = 0; j < g_iGroupsCount; j++) { if(ArrayGetCell(g_iGroupExperience, j) >= iRankExp) { if(!(iRankedGroups & (1<<j))) { iRankExp = ArrayGetCell(g_iGroupExperience, j); iLastGroup = j; } } } ArrayGetString(g_szGroupName, iLastGroup, szGroupName, 19); ArrayGetString(g_szGroupOwner, iLastGroup, szGroupOwnerName, 63); iLen += formatex(g_szTop15Motd[iLen], 1999 - iLen, "%2d. %22.22s | %6d | %13d | %22.22s | %12d | %12d | %12d^n", i + 1, szGroupName, ArrayGetCell(g_iGroupLevel, iLastGroup), ArrayGetCell(g_iGroupExperience, iLastGroup), szGroupOwnerName, ArrayGetCell(g_iGroupAdditionalPoints[XP], iLastGroup), ArrayGetCell(g_iGroupAdditionalPoints[ATTACK], iLastGroup), ArrayGetCell(g_iGroupAdditionalPoints[DEFENSE], iLastGroup)); iRankedGroups |= (1<<iLastGroup); iRankExp = 0; } } public ReadGroupData(iGroup) { new szVaultKey[128], szVaultData[1300], szGroupData[20][64]; formatex(szVaultKey, 127, "1-%d-GroupData", iGroup); if(!nvault_get(g_iVault, szVaultKey, szGroupData[0], 19)) return 0; ArrayPushString(g_szGroupName, szGroupData[0]); formatex(szVaultKey, 127, "2-%d-GroupData", iGroup); nvault_get(g_iVault, szVaultKey, szVaultData, 1299); parse(szVaultData, szGroupData[1], 63, szGroupData[2], 63, szGroupData[3], 63, szGroupData[4], 63, szGroupData[5], 63, szGroupData[6], 63, szGroupData[7], 63, szGroupData[8], 63, szGroupData[9], 63, szGroupData[10], 63, szGroupData[11], 63, szGroupData[12], 63, szGroupData[13], 63, szGroupData[14], 63, szGroupData[15], 63, szGroupData[16], 63, szGroupData[17], 63, szGroupData[18], 63, szGroupData[19], 63); for(new i = 1; i < MAX_MEMBERS; i++) { ArrayPushString(g_szGroupMembers[i], szGroupData[i]); formatex(szVaultKey, 127, "%s-PlayerData", szGroupData[i]); formatex(szVaultData, 1299, "%d#0", iGroup); nvault_set(g_iVault2, szVaultKey, szVaultData); } formatex(szVaultKey, 127, "3-%d-GroupData", iGroup); nvault_get(g_iVault, szVaultKey, szGroupData[0], 63); ArrayPushString(g_szGroupOwner, szGroupData[0]); formatex(szVaultKey, 127, "%s-PlayerData", szGroupData[0]); formatex(szVaultData, 1299, "%d#1", iGroup); nvault_set(g_iVault2, szVaultKey, szVaultData); formatex(szVaultKey, 127, "4-%d-GroupData", iGroup); nvault_get(g_iVault, szVaultKey, szVaultData, 511); replace_all(szVaultData, 511, "#", " "); parse(szVaultData, szGroupData[0], 31, szGroupData[1], 31, szGroupData[2], 31, szGroupData[3], 31, szGroupData[4], 31, szGroupData[5], 31); ArrayPushCell(g_iGroupExperience, str_to_num(szGroupData[0])); ArrayPushCell(g_iGroupLevel, str_to_num(szGroupData[1])); ArrayPushCell(g_iGroupAdditionalPoints[XP], str_to_num(szGroupData[2])); ArrayPushCell(g_iGroupAdditionalPoints[ATTACK], str_to_num(szGroupData[3])); ArrayPushCell(g_iGroupAdditionalPoints[DEFENSE], str_to_num(szGroupData[4])); ArrayPushCell(g_iGroupMembersCount, str_to_num(szGroupData[5])); ArrayPushCell(g_iGroupAdditionalPoints[TO_ADD], (str_to_num(szGroupData[1])-1)*2-str_to_num(szGroupData[2])-str_to_num(szGroupData[3])-str_to_num(szGroupData[4])); /*for(new i = 1; i <= 4; i++) { formatex(szVaultKey, 127, "%d-%d-GroupData", i, iGroup); nvault_remove(g_iVault, szVaultKey); }*/ return 1; } /* public ClearGroupData(iGroup) { new szVaultKey[128], szVaultData[14], iTimeStamp; ArrayGetString(g_szGroupOwner, iGroup, szVaultKey, 127); add(szVaultKey, 127, "-PlayerData", 11); nvault_lookup(g_iVault2, szVaultKey, szVaultData, 1, iTimeStamp); if(iTimeStamp <= (get_systime() - (86400 * DATA_VALIDITY))) { for(new iMember = 1; iMember < ArrayGetCell(g_iGroupMembersCount, iGroup); iMember++) { ArrayGetString(g_szGroupMembers[iMember], iGroup, szVaultKey, 127); add(szVaultKey, 127, "-PlayerData", 11); nvault_remove(g_iVault2, szVaultKey); } ArrayGetString(g_szGroupOwner, iGroup, szVaultKey, 127); add(szVaultKey, 127, "-PlayerData", 11); nvault_remove(g_iVault2, szVaultKey); ArrayDeleteItem(g_szGroupOwner, iGroup); ArrayDeleteItem(g_szGroupName, iGroup); for(new i = 0; i < 4; i++) ArrayDeleteItem(g_iGroupAdditionalPoints[i], iGroup); for(new i = 1; i < MAX_MEMBERS; i++) ArrayDeleteItem(g_szGroupMembers[i], iGroup); ArrayDeleteItem(g_iGroupMembersCount, iGroup); ArrayDeleteItem(g_iGroupExperience, iGroup); ArrayDeleteItem(g_iGroupLevel, iGroup); g_iGroupsCount --; } } */ public ReadUserData(id) { new szVaultData[9], szVaultKey[128], szPlayerGroup[5], szIsGroupOwner[3]; formatex(szVaultKey, 127, "%s-PlayerData", g_szPlayerName[id]); if(!nvault_get(g_iVault2, szVaultKey, szVaultData, 8)) return 0; strtok(szVaultData, szPlayerGroup, 4, szIsGroupOwner, 2, '#'); g_iPlayerGroup[id] = str_to_num(szPlayerGroup); if(szIsGroupOwner[0] == '1') g_iIsGroupOwner[id] = 1; return 1; } public SaveGroupData(iGroup) { new szVaultKey[128], szVaultData[1300], szMemberNameInQuotes[67]; formatex(szVaultKey, 127, "1-%d-GroupData", iGroup); ArrayGetString(g_szGroupName, iGroup, szVaultData, 1299); nvault_set(g_iVault, szVaultKey, szVaultData); formatex(szVaultKey, 127, "2-%d-GroupData", iGroup); copy(szVaultData, 1299, ""); for(new i = 1; i < 20; i++) { if(i < MAX_MEMBERS) ArrayGetString(g_szGroupMembers[i], iGroup, szMemberNameInQuotes, 63); else formatex(szMemberNameInQuotes, 66, " "); format(szMemberNameInQuotes, 66, " ^"%s^"", szMemberNameInQuotes); add(szVaultData, 1299, szMemberNameInQuotes, 66); } nvault_set(g_iVault, szVaultKey, szVaultData); formatex(szVaultKey, 127, "3-%d-GroupData", iGroup); ArrayGetString(g_szGroupOwner, iGroup, szVaultData, 1299); nvault_set(g_iVault, szVaultKey, szVaultData); formatex(szVaultKey, 127, "4-%d-GroupData", iGroup); formatex(szVaultData, 1299, "%d#%d#%d#%d#%d#%d", ArrayGetCell(g_iGroupExperience, iGroup), ArrayGetCell(g_iGroupLevel, iGroup), ArrayGetCell(g_iGroupAdditionalPoints[XP], iGroup), ArrayGetCell(g_iGroupAdditionalPoints[ATTACK], iGroup), ArrayGetCell(g_iGroupAdditionalPoints[DEFENSE], iGroup), ArrayGetCell(g_iGroupMembersCount, iGroup)); nvault_set(g_iVault, szVaultKey, szVaultData); } public SaveUserData(id) { new szVaultData[9], szVaultKey[128]; formatex(szVaultKey, 127, "%s-PlayerData", g_szPlayerName[id]); if(g_iPlayerGroup[id] == -1) return 0; formatex(szVaultData, 8, "%d#%d", g_iPlayerGroup[id], g_iIsGroupOwner[id]); nvault_set(g_iVault2, szVaultKey, szVaultData); return 1; } stock WriteLevelExp(iLevel) return cod_get_level_xp(iLevel)*20; stock print_msg(id, szText[], any:...) { new szOutPut[256]; vformat(szOutPut, 255, szText, 3); ColorChat(id, GREEN, "[COD:MW]^x01 %s", szOutPut); return 1; } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par } */