←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

Zwiększenie DMG W Super Vipie

  • +
  • -
CannabiseK - zdjęcie CannabiseK 27.06.2014

Witam mam super vipa i chciałbym w nim zmienić na moim serwerze ,żeby bił z prawego po 120 a z lewego mniej zrobi mi to ktoś 

Plik sma  : 

Załączone pliki

Odpowiedz

PoDwOJ - zdjęcie PoDwOJ 27.06.2014

Proszę 2 wersje. :)

 

Załączone pliki

Odpowiedz

  • +
  • -
BlackPerfum - zdjęcie BlackPerfum 02.07.2014

Podwoj ;D Pozwól że wskarzę ci twoje błędy ;D
Twoja funkcja:
public TakeDamage(victim, entity, attacker, Float:damage, damagebits)
{
	if(!is_user_connected(attacker) || !is_user_connected(victim))
		return HAM_IGNORED;

	if(get_user_flags(attacker) & ADMIN_LEVEL_H && get_user_weapon(attacker) == CSW_KNIFE)
	{
		SetHamParamFloat(4, 1.2);
	}  
	return HAM_IGNORED;
}
Błędy/brak optymalizacji/niedociągnięcia:
1. sprawdzanie czy osoba której się zadaje dmg jest na serwerze nie ma najmniejszego sensu
gdyż to jest nam najmniej potrzebne. Wiem że to na 99% gracz bo jego classname to "player"
zatem nic nie trzeba sprawdzać ale jeśli chcesz oszczędzić serwerowi zbędnych obliczen możesz
sprawdzić czy gracz w którego trafiliśmy nadal żyje

2. Sprawdzanie flagi nie jest błędem ale to pokazuje brak optymalności gdyż w pluginie z vip'em jest
juz zrobiona zmienna z wartościami adekwatnymi do tego czy jesteśmy vip'em

3. Samo sprawdzenie czy gracz ma nóż aktualnie wyciągnięty nic nam tu nie da bo gracz mógł
rzucic HE i zmienic broń na nóż lub splantować pakę i latać z kosą a funkcja sie wykona sad.png

4. Ustawiasz dmg równe "1.2"?? Po co przeciez autor tematu chciał 120 z ppm i mniej z lpm.

5. Jeśli zmieniasz wartość Dmg przydało by się zwrócić HAM_HANDLED ;D

To tyle z mojej strony. Poprawnie wyglądająca funkcja:
public TakeDamage(id, ent, attacker, Float:damage, damagebits)
{
	if(!is_user_connected(attacker) || !g_Vip[attacker] || ent != attacker || !is_user_alive(id) || get_user_weapon(attacker) != CSW_KNIFE)	return HAM_IGNORED

	SetHamParamFloat(4, damage*=(1 + 846153/999999)) //Najprostszy sposób pokazania okresu ;D
	return HAM_HANDLED
}
Takie cos zadziała jesli z noży każdy bije normalnie tzn. nic nie zwieksza dmg z noża ani go nie zmniejsza

Teraz pytania:
Dlaczego dmg z ppm będzie sie równać 120?? Już tłumaczę. Tu chodzi łównie o ten kod:
SetHamParamFloat(4, damage*=(1 + 846153/999999))
a dokładnie o to:
damage*=(1 + 846153/999999)
Dlaczego dmg powymnożeniu przez (1 + 846153/999999) daje nam 120 z ppm? Policzmy.
chcemy osiągnąć z ppm dmg równe 120 aktualnie zadajemy 65. To dzielimy 120/65=1.(846153) Czyli pomnożenie aktualnego dmg przez 1.(846153) da nam 120 a że autor tematu napisał że chce jedynie mniejsze dmg z lewego (nie napisał ile) to nie trzeba sprawdzać z jakiego udezenia zadaliśmy cios (czy ppm czy lpm). Dobra to jest jasne ale dlaczego mnożę dmg przez (1+ 846153/999999) bo takie coś jest równe 1.(846153) tzn. piękny sposób na dojście do okresu ;D

Podsyłam gotowego vip'a

Załączone pliki

Odpowiedz