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

Problemów kilka.


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

#1 Screeaam...

    ; ooo

  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 05.06.2010 23:54

Witam, mam pewien problem, mianowicie w DeathMsg mam tak:
	if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
	{
		show_deadmessage(kid,vid,headshot,weaponname)
		award_item(kid,0)
		award_kill(kid,vid)
		add_respawn_bonus(vid)
		add_bonus_explode(vid)
		add_barbarian_bonus(kid)
		if (player_class[kid] == Barbarzynca || player_b_galthranbarba[kid] == 1)
		refill_ammo(kid)
		else if (player_class[kid] == Diablo || player_b_galthrandiablo[kid] == 1)
		fm_give_item(kid, "weapon_hegrenade")
		else if (player_class[kid] == Baal || player_b_galthranbaal[kid] == 1 && headshot == 1)
                fm_give_item(id, "weapon_hegrenade")
                fm_give_item(id, "weapon_flashbang")
                fm_give_item(id, "weapon_flashbang")
                fm_give_item(id, "weapon_smokegrenade")
		set_renderchange(kid)
		savexpcom(vid)
	}

Lecz gdy Diablo kogoś atakuje, to się serwer crashuje, dlaczego i jak temu zapobiec?

2. Jak zrobić leczenie klasie bez żadnych bugów na każdej broni?

3. Co w tym kodzie jest źle:

public add_bonus_explode2(id)
{
    new origin[3] 
    get_user_origin(id,origin) 
    explode(origin,id,0)


    for(new a = 0; a < MAX; a++) 
    { 
        if (!is_user_connected(a) || !is_user_alive(a) || player_b_fireshield[a] != 0 ||  get_user_team(a) == get_user_team(id))
        continue 
 
        new origin1[3]
        get_user_origin(a,origin1) 
 
        if(get_distance(origin,origin1) < player_b_explode[id] + player_intelligence[id]*2)
        {
               new dam = 50//-(p_stats[dex][a]*2)
               if(dam<1) dam=1
               change_health(a,-dam,id,"c4")
               Display_Fade(id,2600,2600,0,255,0,0,15)    
        }
    } 
}

Owszem, przypisałem w prethinku, że gdy dana klasa wciśnie R na nożu, to wybuchnie, ale stoje koło wroga, ja wybucham i umieram a przeciwnikowi ani 1 dmg nie zabiera, dlaczego?

Użytkownik Screeaam... edytował ten post 05.06.2010 23:55


#2 Krejzol

    Wszechpomocny

  • Użytkownik

Reputacja: 48
Pomocny

  • Postów:357
Offline

Napisano 06.06.2010 05:26

2. Chodzi ci o to że gdy naładuje się nożem to dostaje życia?
  • +
  • -
  • 0

#3 Siemir

    Profesjonalista

  • Użytkownik

Reputacja: 113
Zaawansowany

  • Postów:204
  • Steam:steam
  • Lokalizacja:nie znana
Offline

Napisano 06.06.2010 08:49

1) Po sprawdzeniu Balla musisz dać klamrę na te 4 granaty oraz zmienić z id na kid.
2) Zrobić set_task z czasem co jaki się ma leczyć, a w funkcji dać pętle sprawdzającą klasy i ewentualnie dającą hp.
3) Oprócz wywołania funkcji musisz nadać jakąś wartość zmiennej player_b_explode.
  • +
  • -
  • 1

#4 Screeaam...

    ; ooo

  • Autor tematu
  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 06.06.2010 13:41

1) Po sprawdzeniu Balla musisz dać klamrę na te 4 granaty oraz zmienić z id na kid.
2) Zrobić set_task z czasem co jaki się ma leczyć, a w funkcji dać pętle sprawdzającą klasy i ewentualnie dającą hp.
3) Oprócz wywołania funkcji musisz nadać jakąś wartość zmiennej player_b_explode.


1) Ok, ale czemu Diablo nie dostawał granatów?
2) Napisałbyś jaśniej jak?
3) W którym miejscu?

#5 Siemir

    Profesjonalista

  • Użytkownik

Reputacja: 113
Zaawansowany

  • Postów:204
  • Steam:steam
  • Lokalizacja:nie znana
Offline

Napisano 06.06.2010 13:59

1) Ale skąd to wiesz jak się serwer sypał?
2) W plugin_init dajesz
set_task(x.0, "heal", 0, "", 0, "b")
za x podstawiasz co jaki czas ma leczyć, i gdzieś dajesz
public heal()
{
	new players[32], count, player, i
	get_players(players, count, "ah")
	for(i=0;i<count;i++)
	{
		player = players[i]
		if(player_class[player] != klasa)
			continue

		change_health(player, y, 0, "")
	}
}
za 'y' dając ilość hp
3) Tam gdzie dodałeś wywołanie funkcji add_bonus_explode2, np.
if(costam)
{
        add_bonus_explode2(id);
        player_b_explode[id] = 250;
}

Użytkownik Siemir edytował ten post 06.06.2010 13:59

  • +
  • -
  • 3

#6 Screeaam...

    ; ooo

  • Autor tematu
  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 06.06.2010 15:15

1) Ale skąd to wiesz jak się serwer sypał?


Bo Diablo jak zabił to nie dostał, a Baal crashuje serwer.

#7 Siemir

    Profesjonalista

  • Użytkownik

Reputacja: 113
Zaawansowany

  • Postów:204
  • Steam:steam
  • Lokalizacja:nie znana
Offline

Napisano 06.06.2010 15:25

Dlatego miałeś dać klamry, bez klamry to po if'ie wykonuje tylko jedną instrukcję reszte niezależnie od warunku. Jak dasz
else if (player_class[kid] == Baal || player_b_galthranbaal[kid] == 1 && headshot == 1)
{
      fm_give_item(kid, "weapon_hegrenade")
      fm_give_item(kid, "weapon_flashbang")
      fm_give_item(kid, "weapon_flashbang")
      fm_give_item(kid, "weapon_smokegrenade")
}
to powinno działać.
  • +
  • -
  • 1

#8 Screeaam...

    ; ooo

  • Autor tematu
  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 06.06.2010 15:59

Mam tak:
	if (is_user_connected(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
	{
		show_deadmessage(kid,vid,headshot,weaponname)
		award_item(kid,0)
		award_kill(kid,vid)
		add_respawn_bonus(vid)
		add_bonus_explode(vid)
		add_barbarian_bonus(kid)
		if (player_class[kid] == Barbarzynca || player_b_galthranbarba[kid] == 1)
		refill_ammo(kid)
		else if (player_class[kid] == Diablo || player_b_galthrandiablo[kid] == 1)
		fm_give_item(kid, "weapon_hegrenade")
		else if (player_class[kid] == Baal || player_b_galthranbaal[kid] == 1 && headshot == 1){
                fm_give_item(kid, "weapon_hegrenade")
                fm_give_item(kid, "weapon_flashbang")
                fm_give_item(kid, "weapon_flashbang")
                fm_give_item(kid, "weapon_smokegrenade")
                }
		set_renderchange(kid)
		savexpcom(vid)
	}

Baal crashuje nadal, Diablo nie dostaje.

#9 Siemir

    Profesjonalista

  • Użytkownik

Reputacja: 113
Zaawansowany

  • Postów:204
  • Steam:steam
  • Lokalizacja:nie znana
Offline

Napisano 06.06.2010 19:29

Sprawdziłem u siebie i faktycznie granaty daje jak mu sie podoba z naciskiem na ich nie dawanie. U mnie żadnych crashy nie było więc to na pewno nie ta część kodu. Natomiast rozwiązanie z granatami zrobiłem dziwne, ale jak coś możesz i innym klasom dać granaty :P.
Zamiast
		else if (player_class[kid] == Diablo || player_b_galthrandiablo[kid] == 1)
		fm_give_item(kid, "weapon_hegrenade")
		else if (player_class[kid] == Baal || player_b_galthranbaal[kid] == 1 && headshot == 1){
                fm_give_item(kid, "weapon_hegrenade")
                fm_give_item(kid, "weapon_flashbang")
                fm_give_item(kid, "weapon_flashbang")
                fm_give_item(kid, "weapon_smokegrenade")
                }
daj
		new param[2]
		param[0]=kid
		param[1]=headshot
		set_task(0.1, "granaty", kid+5000, param, 2)
a w kodzie wklej gdzieś
public granaty(param[])
{
	new id = param[0]

	if(player_class[id] == Diablo || player_b_galthrandiablo[id])
	{
		fm_give_item(id, "weapon_hegrenade")
	}
	else if((player_class[id] == Baal || player_b_galthranbaal[id]) && param[1])
	{
		fm_give_item(id, "weapon_hegrenade")
		fm_give_item(id, "weapon_flashbang")
		fm_give_item(id, "weapon_flashbang")
		fm_give_item(id, "weapon_smokegrenade")
	}
}

  • +
  • -
  • 1

#10 Screeaam...

    ; ooo

  • Autor tematu
  • Zbanowany

Reputacja: 154
Profesjonalista

  • Postów:1 012
  • Lokalizacja:Sosnowiec
Offline

Napisano 07.06.2010 15:36

Dobra, granaty działają, teraz problem, bo ja wybucham, to dalej dmg nie zadaje, mam tak:

Prethink:

        if(player_class[id] == Duriel && on_knife[id] && (button2 & IN_RELOAD)) 
        {
                add_bonus_explode2(id)
                player_b_explode[id] = 250;
                UTIL_Kill(id,id,"grenade")
        }

Koniec sma:

public add_bonus_explode2(id)
{
    new origin[3] 
    get_user_origin(id,origin) 
    explode(origin,id,0)


    for(new a = 0; a < MAX; a++) 
    { 
        if (!is_user_connected(a) || !is_user_alive(a) || player_b_fireshield[a] != 0 ||  get_user_team(a) == get_user_team(id))
        continue 
 
        new origin1[3]
        get_user_origin(a,origin1) 
 
        if(get_distance(origin,origin1) < player_b_explode[id] + player_intelligence[id]*2)
        {
               new dam = 50//-(p_stats[dex][a]*2)
               if(dam<1) dam=1
               change_health(a,-dam,id,"c4")
               Display_Fade(id,2600,2600,0,255,0,0,15)    
        }
    } 
}


#11 Siemir

    Profesjonalista

  • Użytkownik

Reputacja: 113
Zaawansowany

  • Postów:204
  • Steam:steam
  • Lokalizacja:nie znana
Offline

Napisano 07.06.2010 19:23

Wywołujesz funkcję zanim ustawisz zmienną.

        if(player_class[id] == Duriel && on_knife[id] && (button2 & IN_RELOAD)) 

        {

                player_b_explode[id] = 250;

                add_bonus_explode2(id

                UTIL_Kill(id,id,"grenade")

        }


  • +
  • -
  • 0




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

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