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

Obliczania procentowe i 2 itemy.


  • Zamknięty Temat jest zamknięty
13 odpowiedzi w tym temacie

#1 dog_1

    Profesjonalista

  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 15.07.2011 12:15

Cześć. Chciałem napisać temat z 1 głupim pytaniem, ale wtedy by mnie spławili więc coś dodatkowo obmyśliłem:)
Mam problem właśnie z zapisywaniem obliczeń w których wynik jest zmiennoprzecinkowy. A że chciałem zrobić exp dla wyższych sfer 25% razy większy to na tym przykładzie będę się wzorował
if( get_user_flags(id) & ADMIN_IMMUNITY) amount *= 
No i właśnie niewiem jak to zapisać. float 0.25; 1/4 to głupoty wiem i nie będę dalej wypisywać by się nie ośmieszyć. W c starczało przypisaniu zmiennym float.

Item dający właścicielowi mniejsze obrażenia o 25% zadanych w plecy z noża :) Item można zrobić na podstawie itemu darksteel(bonus_darksteel) i itemów zmniejszających obrażenia (bonus_redirect) Nie wiem czy dobrze myślę ale public itemu wyglądałby jakoś tak?
public add_bonus_darksteel(attacker,id,damage)
{
if (player_b_knifesteel[attacker] > 0 && get_user_team(attacker_id) != get_user_team(id) && weapon == CSW_KNIFE)
{
if (UTIL_In_FOV(attacker,id) && !UTIL_In_FOV(id,attacker))
{
//tu chyba jakieś obliczenia
{
change_health(id,player_b_knifesteel[id],0,"")
}
}
}
}

Zalewam? Wiem, ale coś próbuję.
A teraz co napiszę to teraz jest bajką :) Myślałem jak zrobić itemek który odbija pociski gdy ktoś strzeli właściciela w głowę.Zrobiłoby się to na podstawie ultra_armor któremu można by można przepisać(chodź wątpię bo public fw_traceline jed długi) i zmienić na ultra_helm a w if zadeklarować gdzieś
if (hitplace == HIT_HEAD)
hitplace zadeklarować w
if (is_user_connected(id))
{
new weapon
new bodypart
new hitplace


Troszkę o dużo się pytam, ale jeżeli ktoś wie coś o tym to może się podzielić innym.
  • +
  • -
  • 0

#2 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 16.07.2011 03:26

public newpower(attacker,id,damage)
{
	new weapon = get_user_weapon(id)

	if ((player_b_knifesteel[id] > 0) && (get_user_team(attacker_id) != get_user_team(id)) && (weapon == CSW_KNIFE))
	{
       		if (UTIL_In_FOV(attacker,id) && !UTIL_In_FOV(id,attacker)) change_health(id,+damage/4,0,"")
	}
}
spróbuj...co do drugiego w codzie masz podobne poszukaj i zamień że jeżeli trafi w head'a to ma ignorować obrażenia...a z tym expem to podziel zyskany exp np. kładzie pake i dostaje 100 dzielisz na 4 i tym sposobem dostaje 25% więcej.
  • +
  • -
  • 1

#3 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 16.07.2011 12:27

Coś nie trybi. W errorze głównie to wyświetliło że nie zna zmiennej attacker_id. Spróbowałem zmienić publica na
public newpower(id,damage,attacker_id)
Co nie pomogło(tylko nie wyskakuje że nie zna attacker_id).

Tak było by najłatwiej, ale chcę aby każdy exp(za fraga, wygranie rundy i paczkę(3 różne cvar) i za wskrzeszenia) dawałao 25% więcej dlatego zapis
amount *=
I nie wiem jak zapisać równanie :) bo jeżeli i*2=i to dlaczego i*0.25=0 ? Jak już pisałem próbowałem wszystkich, łatwych dla mnie obliczeń czyli 1.0/4.0 ; (1/4) itd. Szczerze to jest mój problem nr. 1 i tylko na jego rozwiązaniu mi zależy. Itemy może w między czasie mi wpadną.
  • +
  • -
  • 0

#4 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 18.07.2011 22:37

Przyznawanie doświadczenia CT który rozbroi pakę(więcej XP) i całej drużynie(mniej):
public award_defuse()
{
	new Players[32], playerCount, id
	get_players(Players, playerCount, "aeh", "CT") 
	
	for (new i=0; i<playerCount; i++) 
	{
		id = Players[i] 
		Give_Xp(id,get_cvar_num("diablo_xpbonus"))	
		client_print(id,print_chat,"Dostales *%i* doswiadczenia i 2 many za rozbrojenie bomby przez twoj team",get_cvar_num("diablo_xpbonus2"))
		dajszmaragdy(id)
	}
	
	Give_Xp(defuser,get_cvar_num("diablo_xpbonus2"))
	//dajszmaragdy(id)
}
Jak chcesz oby dwa żeby dawały o 25% więcej to:
Give_Xp(id,get_cvar_num("diablo_xpbonus"))
Give_Xp(defuser,get_cvar_num("diablo_xpbonus2"))
Na:
Give_Xp(id,get_cvar_num("diablo_xpbonus")+(get_cvar_num("diablo_xpbonus")/4))
Give_Xp(defuser,get_cvar_num("diablo_xpbonus2")+(get_cvar_num("diablo_xpbonus2")/4))
Lub:
Give_Xp(id,get_cvar_num("diablo_xpbonus")+(get_cvar_num("diablo_xpbonus")*0.25))
Give_Xp(defuser,get_cvar_num("diablo_xpbonus2")+(get_cvar_num("diablo_xpbonus2")*0.25))

Myślę że resztę zrobisz sam...oczywiście w tym dajesz wcześniej if'a że ma wymaganą flagę i else jeżeli niema.

Co do:

Co nie pomogło(tylko nie wyskakuje że nie zna attacker_id)

Dodałeś do publica Damage ?
public newpower(id,damage,attacker_id)

Użytkownik KariiO edytował ten post 18.07.2011 22:39

  • +
  • -
  • 1

#5 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 19.07.2011 07:13

Give_Xp(id,floatround(get_cvar_num("diablo_xpbonus")*1.25,floatround_floor))


tez powinno zadziałać

  • +
  • -
  • 1

#6 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 19.07.2011 12:32

Dodałeś do publica Damage ?

public newpower(id,damage,attacker_id)

Nie ;P tam nic nie dodawałem. Opiszę co zrobiłem:
1.Pod
new player_b_shake[33] = 1
dałem
new player_b_knifesteel[33]=1
Potem jeszcze oczywiście w reset_item_skills
new player_b_shake[id] = 0
Następnie w item_info(id) :
if (player_b_knifesteel[id] > 0)
	{
		
		add(itemEffect,199,"Dostajesz 25% obrażeń mniej z noża zadanych w plecy <br>")
	}
Case:
case 86:
		{
			player_item_name[id] = "Knifesteel"
			player_item_id[id] = rannum
			player_b_knifesteel[id] = 1
			show_hudmessage(id, "Znalazles przedmiot: %s :: Dostajesz mniejsze obrażenia z noża", player_item_name[id])
		}

I na końcu kodu ten właśnie public. A o to errory:
dbmod_5.sma(9412) : error 017: undefined symbol "attacker_id"
dbmod_5.sma(9414) : error 029: invalid expression, assumed zero
dbmod_5.sma(9414) : warning 215: expression has no effect
dbmod_5.sma(9414) : warning 215: expression has no effect
dbmod_5.sma(9414) : warning 215: expression has no effect
dbmod_5.sma(9414) : error 001: expected token: ";", but found ")"
dbmod_5.sma(9414) : error 029: invalid expression, assumed zero
dbmod_5.sma(9414) : fatal error 107: too many error messages on one line

Dzięki za pomoc w ustawieniu tego expa dla Vips, zapomniałem o tym else i zapisywałem to tak: if (..) esle if i nie chciało mi zaskoczyć bo brakowało argumentu :) Więc zapiszę to na z wyświetlanym info
public award_defuse()
{
new Players[32], playerCount, id
get_players(Players, playerCount, "aeh", "CT")

for (new i=0; i<playerCount; i++)
{
id = Players[i]
if( get_user_flags(defuser) & ADMIN_LEVEL_H){
Give_Xp(id,floatround(get_cvar_num("diablo_xpbonus")*1.25,floatround_floor))
client_print(id,print_chat,"Dostales *%i* doswiadczenia za rozbrojenie bomby przez twoj team",floatround(get_cvar_num("diablo_xpbonus2")*1.25,floatround_floor))
}
else{
Give_Xp(id,get_cvar_num("diablo_xpbonus"))
client_print(id,print_chat,"Dostales *%i* doswiadczenia za rozbrojenie bomby przez twoj team",get_cvar_num("diablo_xpbonus2"))
}
}
if( get_user_flags(defuser) & ADMIN_LEVEL_H){
Give_Xp(defuser,floatround(get_cvar_num("diablo_xpbonus2")*1.25,floatround_floor))
}
else Give_Xp(defuser,get_cvar_num("diablo_xpbonus2"))
}

Jak myślicie, czy zapisanie public dmg_exp:
public dmg_exp(id)
{
if( get_user_flags(defuser) & ADMIN_LEVEL_H){
new min=floatround(get_cvar_num("diablo_dmg_exp")*1.25,floatround_floor)
if(min<1) return
new exp=0
while(player_dmg[id]>min)
{
player_dmg[id]-=min
exp++
}
Give_Xp(id,exp)
}
else{
new min=get_cvar_num("diablo_dmg_exp")
if(min<1) return
new exp=0
while(player_dmg[id]>min)
{
player_dmg[id]-=min
exp++
}
Give_Xp(id,exp)
}
}

Odpowiednio zadziała? Czy to jest jedyny sposób na zwiększenie expa czy lepiej dopisać lepiej flagę przy give_xp. Chcę aby obliczenia które będą się wykonywały dały jak najniższy wynik.

Użytkownik dog_1 edytował ten post 19.07.2011 14:30

  • +
  • -
  • 0

#7 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 19.07.2011 16:13

Może nie będzie trzeba latać po publicach od zabijania , podkładania paki itp...

public Give_Xp(id,amount)
{
        new Players[32], zablokuj;
        get_players(Players, zablokuj, "ch");
        if(zablokuj < 1 && amount < 200) return PLUGIN_CONTINUE;
        if(player_class_lvl[id][player_class[id]]==player_lvl[id])
        {
		if(player_xp[id]+amount!=0 && get_playersnum()>1){
			player_xp[id]+=amount
			if (player_xp[id] > LevelXP[player_lvl[id]])
			{
				player_lvl[id]+=1
				player_point[id]+=2
				set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
				show_hudmessage(id, "Awansowales do poziomu %i", player_lvl[id]) 
				new name[32]
				get_user_name(id, name, 31) 
				ColorChat(0, GREEN, "^x04%s^x01 awansowal na^x04 %i^x01 level (^x04 %s^x01)", name, player_lvl[id], Race[player_class[id]])
				savexpcom(id)
				player_class_lvl[id][player_class[id]]=player_lvl[id]
			}
			
			if (player_xp[id] < LevelXP[player_lvl[id]-1])
			{
				player_lvl[id]-=1
				player_point[id]-=2
				set_hudmessage(60, 200, 25, -1.0, 0.25, 0, 1.0, 2.0, 0.1, 0.2, 2)
				show_hudmessage(id, "Spadles do poziomu %i", player_lvl[id]) 
				savexpcom(id)
				player_class_lvl[id][player_class[id]]=player_lvl[id]
			}
			write_hud(id)
			
		}
	}
        return PLUGIN_CONTINUE;
}
U mnie tak wygląda public Give_Xp , wystarczy zmienić:
player_xp[id]+=amount
na:
if(sprawdzasz czy ma flagę) player_xp[id]+=amount+(amount/4)
else player_xp[id]+=amount

  • +
  • -
  • 1

#8 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 19.07.2011 22:33

Tak, zdecydowanie to jest najlepsze rozwiązanie :) Ale te if przy wiadomościach zostawię. Jeśli nie macie pomysłów co do itemu dającemu mniejsze obrażenia zadane w plecy z noża, to będzie można zamknąć temat.
  • +
  • -
  • 0

#9 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 19.07.2011 22:54

UP
Jest rozwiązanie...pokaż public Damage ( cały ).
  • +
  • -
  • 0

#10 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 20.07.2011 09:37

public Damage(id)
{
if (is_user_connected(id))
{
new weapon
new bodypart
new attacker_id = get_user_attacker(id,weapon,bodypart)
if(attacker_id!=0 && attacker_id != id)
{
new damage = read_data(2)
if (is_user_connected(attacker_id))
{
if(get_user_team(id) != get_user_team(attacker_id))
{
if(damage>175) player_dmg[attacker_id]+=damage/2
else player_dmg[attacker_id]+=damage
dmg_exp(attacker_id)

add_damage_bonus(id,damage,attacker_id)
add_vampire_bonus(id,damage,attacker_id)
add_grenade_bonus(id,attacker_id,weapon)
add_theif_bonus(id,attacker_id)
add_bonus_blind(id,attacker_id,weapon,damage)
add_bonus_redirect(id)
add_bonus_necromancer(attacker_id,id)
add_bonus_scoutdamage(attacker_id,id,weapon)
add_bonus_darksteel(attacker_id,id,damage)
add_bonus_illusion(attacker_id,id,weapon)
item_take_damage(id,damage)

if(player_sword[attacker_id] == 1 && weapon==CSW_KNIFE )
change_health(id,-35,attacker_id,"world")
if (HasFlag(attacker_id,Flag_Ignite))
RemoveFlag(attacker_id,Flag_Ignite)
if((HasFlag(id,Flag_Illusion) || HasFlag(id,Flag_Teamshield))&& get_user_health(id) - damage > 0)
{
new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
UTIL_Kill(attacker_id,id,weaponname)
}
if (HasFlag(id,Flag_Moneyshield))
change_health(id,damage/2,0,"")
if (damage > 0 && player_agility[id] > 0)
{
new heal = floatround(player_damreduction[id]*damage)
if (is_user_alive(id)) change_health(id,heal,0,"")
}
if (HasFlag(id,Flag_Teamshield_Target))
{
new owner = find_owner_by_euser(id,"Effect_Teamshield")
new weaponname[32]; get_weaponname( weapon, weaponname, 31 ); replace(weaponname, 31, "weapon_", "")
if (is_user_alive(owner))
{
change_health(attacker_id,-damage,owner,weaponname)
change_health(id,damage/2,0,"")
}
}
if(weapon == CSW_GLOCK18 || weapon == CSW_USP || weapon == CSW_P228 || weapon == CSW_DEAGLE || weapon == CSW_ELITE || weapon == CSW_FIVESEVEN)
{
switch(player_class[attacker_id])
{
case Mag:
{
if(DemageTake[id] == 0) {
DemageTake[id] = 1;
AddFlag(id, Flag_Zamroz);
set_speedchange(id);
set_renderchange(id);
new data[3];
data[0] = 5; // obrazenia, tutaj zmieniasz wartość obrażeń zadawanych co 2 sek.
data[1] = attacker;
data[2] = weapon;
set_task(11.0, "funcReleaseVic", id);
set_task(11.0, "funcReleaseVic2", id);
set_task(2.0, "funcDemageVic", id+GLUTON, data, 3, "b");
}
}
case Zabojca:
{
set_task(1.5, "funcDemageVic3", id)
}
case Hunter:
{
new ori[3]
trace_bool[attacker_id]=id
get_user_origin(id,ori)

new parms[5];

for(new i=0;i<3;i++)
{
parms[i] = ori[i]
}
parms[3]=attacker_id
parms[4]=id
set_task(0.5,"charge_hunter",attacker_id,parms,5)
}
}
}
}
}
}
}
}

Oto on. Czyżbym miał dodać pod
add_bonus_illusion(attacker_id,id,weapon)

newpower(attacker,id,damage)
?

Użytkownik dog_1 edytował ten post 20.07.2011 09:41

  • +
  • -
  • 0

#11 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 20.07.2011 10:48

jeśli już to tak.

newpower(attacker_id,id,damage)

  • +
  • -
  • 0

#12 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 20.07.2011 20:34

Racja stachu,ale mimo to dalej nie idetyfikuje attecer_id
error 017: undefined symbol "attacker_id"

  • +
  • -
  • 0

#13 Stachuu :D ??

    Wszechobecny

  • Użytkownik

Reputacja: 237
Wszechwidzący

  • Postów:476
  • GG:
  • Steam:steam
  • Imię:Dawid
  • Lokalizacja:Karsznice
Offline

Napisano 20.07.2011 22:15

new attacker_id masz przecież .
  • +
  • -
  • 0

#14 dog_1

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 23
Życzliwy

  • Postów:150
  • Lokalizacja:Gdańsk
Offline

Napisano 21.07.2011 08:59

Nie rozumiem tego. Jest ale nie czyta, coś podobnego do twojego kodu na Exp za pełny serwer, new czas[33] twierdzi że nie wie co to jest, a jak usunę obliczenia z wykorzystaniem tej tablicy to mówi że new czas[33] nie jest nie jest potrzebny, bo nie jest wykorzystywany ;) Mniejsza o to.

Wewnętrzne obliczenia są błędne. Wpisałem sobie byle by wiedział o new attacker_id. I obliczenia od tego, że jak dostanie się w tył plecy, to z tego obrażenia ma dać 25% z tego hp trzeba jakoś inaczej zapisać.
  • +
  • -
  • 0




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

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