Официалният форум на iPlay.bg 

Този раздел е създаден специално за проблеми и въпроси за направата на плъгини или преработката на вече съществуващи кодове.
 #397873  от black_heart
 чет сеп 01, 2016 11:00 pm
как да сложа в този код следните неща
- При Headshot да дава +2EXP повече, и да изписва c dhud + 2 EXP
- При Knife да дава +3EXP
- При HE + 5EXP
- за Вип играчите с флаг БАН да дава х2 EXP
Код: Избери всички
public Hook_Deathmessage()
{
    new killer = read_data(1);
    new victim = read_data(2);
    
    if(killer == victim)
        return PLUGIN_CONTINUE;
    if(!killer || killer > maxPlayers)
        return PLUGIN_CONTINUE;
    
    gPlayerPoints[killer]++
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MAXRANKS - 1))
    {       
        if(gPlayerPoints[killer] >= rankXP[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    new OldRank = PlayerRank[killer]
    PlayerRank[killer] = currentPlayerRank
    Save( killer );
    if(OldRank < currentPlayerRank)
    {
        new g_name[32]
        get_user_name(killer, g_name, 31)
        ColorChat(0, GREEN, "[prefix] ^1Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[killer]])
    }
    return PLUGIN_CONTINUE;
} 
 #397874  от OciXCrom™
 чет сеп 01, 2016 11:56 pm
Добавяш нещата на мястото на gPlayerPoints[killer]++ (триеш този ред).

Добавяш нова променлива, която ще държи общата награда от извършеното убийство и задаваш стойността 1, тъй като за обикновено убийство трябва да получиш 1 XP:
Код: Избери всички
new iReward = 1
Проверка за headshot:
Код: Избери всички
if(read_data(3))
    iReward += 2
Погледни тук как се прави HUD съобщение. Вземи фунцкиите set_hudmessage и show_hudmessage от примерите, обаче ползвай set_dhudmessage и show_dhudmessage. Параметрите са същите. Имай предвид, че ако AMXX-ът ти не е 1.8.3, трябва да добавиш #include <dhudmessage> най-отгоре.

Проверка за нож и граната:
Код: Избери всички
new szWeapon[16]
read_data(4, szWeapon, charsmax(szWeapon))

if(equal(szWeapon, "knife"))
    iReward += 3
else if(equal(szWeapon, "grenade"))
    iReward += 5
Проверка за бан флаг:
Код: Избери всички
if(get_user_flags(killer) & ADMIN_BAN)
    iReward *= 2
Добавяме наградата към XP-то на играча:
Код: Избери всички
gPlayerPoints[killer] += iReward

Sent from my HTC Desire 610 using Tapatalk
 #397879  от black_heart
 пет сеп 02, 2016 10:11 am
Направих всичко както си написал но ми дава >
Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

Warning: Loose indentation on line 612
Error: Invalid function call, not a valid address on line 616
Warning: Expression has no effect on line 616
Error: Expected token: ";", but found ")" on line 616
Error: Invalid expression, assumed zero on line 616
Error: Too many error messages on one line on line 616

Compilation aborted.
4 Errors.

Ред 612 "read_data(4, szWeapon, charmax(szWeapon))"
ето и целия код
Код: Избери всички
public Hook_Deathmessage()
{
    new killer = read_data(1);
    new victim = read_data(2);
    
    if(killer == victim)
        return PLUGIN_CONTINUE;
    if(!killer || killer > maxPlayers)
        return PLUGIN_CONTINUE;
    
    new iReward = 1
    if(read_data(3))
	iReward += 2
	set_dhudmessage(255, 0, 0, 0.71, 2.38, 0, 6.0, 12.0);
	show_dhudmessage(killer, "+ 2EXP");
	
	new szWeapon[16]
	read_data(4, szWeapon, charmax(szWeapon));
	
	if)equal (szWeapon, "knife"))
		iReward += 3
	else if(equal(szWeapon, "grenade"))
		iReward += 5
		
	if(get_user_flags(killer( & ADMIN_BAN)
		iReward *= 2
		
	gPlayerPoints[killer] += iReward
	
	
	
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MAXRANKS - 1))
    {       
        if(gPlayerPoints[killer] >= rankXP[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    new OldRank = PlayerRank[killer]
    PlayerRank[killer] = currentPlayerRank
    Save( killer );
    if(OldRank < currentPlayerRank)
    {
        new g_name[32]
        get_user_name(killer, g_name, 31)
        ColorChat(0, GREEN, "[prefix] ^1Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[killer]])
    }
    return PLUGIN_CONTINUE;
}  
Edit: Оправих се.

Добавено преди 1 час 14 минути 50 секунди:
Имам само 1 проблем, който забелязах по-късно. Добавих и dhud съобщения за knife, headshot и на ADMIN_BAN, но не се получиха. Моля за помощ.
 #397889  от OciXCrom™
 пет сеп 02, 2016 2:23 pm
Покажи целия код с добавените съобщения.

Това тук не е правилно:
Код: Избери всички
if(read_data(3))
   iReward += 2
   set_dhudmessage(255, 0, 0, 0.71, 2.38, 0, 6.0, 12.0);
   show_dhudmessage(killer, "+ 2EXP");
В моя код съм го добавил без скоби, тъй като под if има само 1 ред. Ако има повече от един ред, трябва да сложиш скоби:
Код: Избери всички
if(read_data(3))
{
   iReward += 2
   set_dhudmessage(255, 0, 0, 0.71, 2.38, 0, 6.0, 12.0);
   show_dhudmessage(killer, "+ 2EXP");
}
 #397903  от black_heart
 пет сеп 02, 2016 5:01 pm
Ето какво съм направил, въпроса ми е дали е правилно.
Код: Избери всички
	new killer = read_data(1);
	new victim = read_data(2);
	
	if( killer == victim || !killer || killer > maxPlayers ) return
	
	new szWeapon[20]
	read_data( 4 , szWeapon , charsmax( szWeapon ) );
	
	
	set_dhudmessage(255, 255, 255, -1.0, 0.15, 2, 1.0, 1.0, 0.1, 0.1, false);
	
	if(read_data(2))
	{
		show_dhudmessage(killer, "+1 EXP !")
		gPlayerPoints[killer]+= 1
	}
	else
	if(read_data(3))
	{
		show_dhudmessage(killer, "+2 EXP !")
		gPlayerPoints[killer] += 2
	}
	
	
	if(get_user_flags(killer) & ADMIN_BAN)
	{
		show_dhudmessage(killer, "+4 EXP !")
		gPlayerPoints[killer]+= 2
	} 
	else 
	{
		if( !equal (szWeapon, "knife") || ! !equal (szWeapon, "grenade") )
		{
			show_dhudmessage(killer, "+ 4 EXP !")
			gPlayerPoints[killer] += 2	
			return 
		}
		
		if(equal (szWeapon, "knife"))
		{
			ColorChat(victim, GREY, "^4[^3MC^4]^3 You have lose - 10 EXP !")
			client_cmd(victim, "spk rankings/smb3_powerdown")
			gPlayerPoints[killer] -= 10
			
			show_dhudmessage(killer, "+ 2 EXP !")
			gPlayerPoints[killer] += 2
			return 
		}
		
		if (equal( szWeapon, "grenade"))
		{
			show_dhudmessage(killer, "+ 5 EXP !")
			gPlayerPoints[killer] += 5
		}
		
		if(read_data(3))
		gPlayerPoints[killer] +=2
	}
 #397904  от OciXCrom™
 пет сеп 02, 2016 5:35 pm
Проверката за read_data(2)) е излишна, тъй като я има по-горе в друга форма, а в случая блокира и проверката за headshot. Не слагай else, защото по този начин ще блокираш останалите награди. Проверките с !equal нямат логика. Ползвай само едно съобщение в края, тъй като в момента ще се покажат поне 5 такива едно върху друго. Затова казах да добавиш отделна променлива за наградата, за да можеш да я добавиш в съобщението. show_dhudmessage(killer, +%i XP", iReward.

Sent from my HTC Desire 610 using Tapatalk

Добавено преди 5 минути 29 секунди:
Ако не можеш да се оправиш, ще ти го направя по-късно, тъй като в момента съм на телефона.

Sent from my HTC Desire 610 using Tapatalk
 #397905  от OciXCrom™
 пет сеп 02, 2016 5:35 pm
Ако не можеш да се оправиш, ще ти го направя по-късно, тъй като в момента съм на телефона.

Sent from my HTC Desire 610 using Tapatalk
 #397908  от black_heart
 пет сеп 02, 2016 5:50 pm
OciXCrom™ написа:Ако не можеш да се оправиш, ще ти го направя по-късно, тъй като в момента съм на телефона.

Sent from my HTC Desire 610 using Tapatalk
Добре ще изчакам, че днес ми дойде в повече да тествам с тоя плъгин. И благодаря!
 #397948  от OciXCrom™
 съб сеп 03, 2016 2:33 pm
Код: Избери всички
public Hook_Deathmessage()
{
    new killer = read_data(1);
    new victim = read_data(2);
   
    if(killer == victim)
        return PLUGIN_CONTINUE;
    if(!killer || killer > maxPlayers)
        return PLUGIN_CONTINUE;
   
    new iReward = 1
    
    if(read_data(2))
        iReward += 2
        
    new szWeapon[16]
    read_data(4, szWeapon, charsmax(szWeapon))
    
    if(equal(szWeapon, "knife"))
    {
        iReward += 3
        ColorChat(victim, GREY, "^4[^3MC^4]^3 You have lost 10 EXP !")
        client_cmd(victim, "spk rankings/smb3_powerdown")
        gPlayerPoints[victim] -= 10
    }
    else if(equal(szWeapon, "grenade"))
        iReward += 5
        
    if(get_user_flags(killer) & ADMIN_BAN)
        iReward *= 2
        
    gPlayerPoints[killer] += iReward
    set_dhudmessage(255, 0, 0, 0.71, 2.38, 0, 6.0, 12.0);
       show_dhudmessage(killer, "+ %iEXP", iReward)
    
    new currentPlayerRank = 0;
    while(currentPlayerRank < (MAXRANKS - 1))
    {       
        if(gPlayerPoints[killer] >= rankXP[currentPlayerRank + 1])
            ++currentPlayerRank;     
        else         
            break;
    }
    new OldRank = PlayerRank[killer]
    PlayerRank[killer] = currentPlayerRank
    Save( killer );
    if(OldRank < currentPlayerRank)
    {
        new g_name[32]
        get_user_name(killer, g_name, 31)
        ColorChat(0, GREEN, "[prefix] ^1Congratulations! ^x03%s^x01 got a new rank ^x04%s", g_name, rankNames[PlayerRank[killer]])
    }
    return PLUGIN_CONTINUE;
}
 
 #397953  от black_heart
 съб сеп 03, 2016 3:34 pm
Когато убиеш някой с пистолет не дава XP, дава само ако си с ак, м4а1 и другите. но с пистолети не дава.