Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Silnik

Usunięcie prefixów z klanów

silnik

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
2 odpowiedzi w tym temacie

#1 treflzott

    Początkujący

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:12
Offline

Napisano 05.02.2017 05:51

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 }
*/


  • +
  • -
  • 0

#2 AwIlL^^

    Magiczny Gość

  • Użytkownik

Reputacja: 135
Zaawansowany

  • Postów:263
  • Steam:steam
  • Imię:Eryk
  • Lokalizacja:Gdańsk
Offline

Napisano 05.02.2017 19:13

Spoiler

  • +
  • -
  • 1

Potrzebujesz porad do amxx?? Pisz na [PW]


#3 treflzott

    Początkujący

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:12
Offline

Napisano 05.02.2017 19:31

Działa. Dzięki. :)


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: silnik

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych