←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

Knife_mod z kosami dla vip

  • +
  • -
RiderS - zdjęcie RiderS 23.02.2017

Cześć.
Mam problem.
 
Próbuje przerobić plugin KNIFE MOD, tak aby np. kosa z gravitka i regeneracją HP, były na flage ADMIN_LEVEL_H "t".

Mógłby ktoś napisać jaki warunek mam dać i gdzie go dać.

Warunek jaki ja dodaje :

	if(!is_user_connected(id) || !(get_user_flags(id) & read_flags("t")))
	return PLUGIN_HANDLED;

Nie wiem czy dobry :P

Gdy daje ten warunek tutaj : 

public display_knife(id) {
	if(!is_user_connected(id) || !(get_user_flags(id) & read_flags("b")))
	return PLUGIN_HANDLED;

	new menuBody[512]
	add(menuBody, 511, "\rKnife Mod\w^n^n")
	add(menuBody, 511, "1. Machete \y(More Damage/Low Speed)\w^n")
	add(menuBody, 511, "2. Bak Knife \y(No Footsteps)\w^n")
	add(menuBody, 511, "3. Pocket Knife \y(High Speed)\w^n")
	add(menuBody, 511, "4. Butcher Knife \y(Low Gravity)\w^n")
	add(menuBody, 511, "5. Default Knife \y(Health Regeneration)\w^n^n")
	add(menuBody, 511, "0. Exit^n")
	
	new keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<9 )
	show_menu(id, keys, menuBody, -1, "Knife Mod")
	
	return PLUGIN_CONTINUE;
}

To plugin mi działa 


Użytkownik RiderS edytował ten post 23.02.2017 15:25
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 02.03.2017

@ref xD

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 05.03.2017

get_user_flags(id) & ADMIN_LEVEL_H

Rozpiska flag i ich powiązane makra dostępna m.in. w pliku configs/users.ini
Użytkownik _McHappy edytował ten post 05.03.2017 21:28
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 05.03.2017

get_user_flags(id) & ADMIN_LEVEL_H

Rozpiska flag i ich powiązane makra dostępna m.in. w pliku configs/users.ini

Tak, tylko moje pytanie gdzie to dać?

Dać to tak, aby np. kosa z gravitka i regeneracją HP były dla VIP/flage ^^

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 05.03.2017

Najoptymalniej jest zawrzeć ten warunek w uchwycie menu, pod 'case' pożądanej pozycji menu.
Podaj treść funkcji uchwytu menu.
Użytkownik _McHappy edytował ten post 05.03.2017 21:42
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 05.03.2017

Warunek dodaje w miejscach

public display_knife(id) {
	new menuBody[512]
	add(menuBody, 511, "\rKnife Mod\w^n^n")
	add(menuBody, 511, "1. Machete \y(More Damage/Low Speed)\w^n")
	add(menuBody, 511, "2. Bak Knife \y(No Footsteps)\w^n")
	add(menuBody, 511, "3. Pocket Knife \y(High Speed)\w^n")
    	add(menuBody, 511, "4. Butcher Knife \y(Low Gravity)\w^n")
        if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
        return PLUGIN_HANDLED;
	add(menuBody, 511, "5. Default Knife \y(Health Regeneration)\w^n^n")
	add(menuBody, 511, "0. Exit^n")
	
	new keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<9 )
	show_menu(id, keys, menuBody, -1, "Knife Mod")
}

Wtedy po wpisaniu komendy /knife menu wyświetli się, jeśli gracz ma flagę

public knifemenu(id, key) {
	switch(key) 
	{
		case 0: SetKnife(id , 4)
                if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
                return PLUGIN_HANDLED;
		case 1: SetKnife(id , 2)
		case 2: SetKnife(id , 3)
		case 3: SetKnife(id , 1)
		case 4: SetKnife(id , 0)
		default: return PLUGIN_HANDLED
	}
	SaveData(id)
	return PLUGIN_HANDLED
} 

Mam błędy podczas kompilacji, tutaj podaje błędy

//// knife_mod.sma
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(79) :
error 002: only a single statement (or expression) can follow each "case"
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
warning 225: unreachable code
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
error 014: invalid statement; not in switch
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
warning 215: expression has no effect
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
error 001: expected token: ";", but found ":"
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
error 029: invalid expression, assumed zero
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(81) :
fatal error 107: too many error messages on one line
//

Gdy dam tu 

public SetKnife(id , Knife) {
	knife_model[id] = Knife
	
	new Clip, Ammo, Weapon = get_user_weapon(id, Clip, Ammo) 
	if ( Weapon != CSW_KNIFE )
		return PLUGIN_HANDLED
	
	new vModel[56],pModel[56]
	
	switch(Knife)
	{
		case 0: {
			format(vModel,55,"models/v_knife.mdl")
			format(pModel,55,"models/p_knife.mdl")
		}
		case 1: {
			format(vModel,55,"models/knife-mod/v_butcher.mdl")
			format(pModel,55,"models/knife-mod/p_butcher.mdl")
                	if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
	                return PLUGIN_HANDLED;
		}
		case 2: {
			format(vModel,55,"models/knife-mod/v_bak.mdl")
			format(pModel,55,"models/knife-mod/p_bak.mdl")
		}
		case 3: {
			format(vModel,55,"models/knife-mod/v_pocket.mdl")
			format(pModel,55,"models/knife-mod/p_pocket.mdl")
		}
		case 4: {
			format(vModel,55,"models/knife-mod/v_machete.mdl")
			format(pModel,55,"models/knife-mod/p_machete.mdl")
		}
	} 
	
	entity_set_string(id, EV_SZ_viewmodel, vModel)
	entity_set_string(id, EV_SZ_weaponmodel, pModel)
	
	return PLUGIN_HANDLED;  
}

Gracz dostanie moc, a modelu nie :P 

Nwm może dasz radę to jakoś ogarnąć (bo mnie to przerasta  :wstyd:  ) i podesłać *sma, ewentualnie wycinek kodu w którym dasz warunek  :)

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 05.03.2017

2. wrzucony kod:
Treść case'a zawierająca kilka linijek musi zostać objęta klamrami.

Wystarczy zawarcie warunku w 2. wrzuconym kodzie.
Użytkownik _McHappy edytował ten post 05.03.2017 22:25
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 06.03.2017

Że tak? Bo ja już głupieje  :wstyd:

public knifemenu(id, key) {
	switch(key) 
	{ 
		{
                case 0: SetKnife(id , 4)
                if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
                return PLUGIN_HANDLED;
        }
		case 1: SetKnife(id , 2)
		case 2: SetKnife(id , 3)
		case 3: SetKnife(id , 1)
		case 4: SetKnife(id , 0)
		default: return PLUGIN_HANDLED
	}
	SaveData(id)
	return PLUGIN_HANDLED
}

Może(pewno tak) w złym miejscu to daję :>

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 06.03.2017

Treść case'a, nie sam case.

Case x:
{

}
Użytkownik _McHappy edytował ten post 06.03.2017 14:08
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 06.03.2017

Treść case'a, nie sam case.

Case x:
{

}

public knifemenu(id, key) {
	switch(key) 
	{ 
                case 0: SetKnife(id , 4)
                {
                if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
                return PLUGIN_HANDLED;
                }
		case 1: SetKnife(id , 2)
		case 2: SetKnife(id , 3)
		case 3: SetKnife(id , 1)
		case 4: SetKnife(id , 0)
		default: return PLUGIN_HANDLED
	}
	SaveData(id)
	return PLUGIN_HANDLED
}

Mam wysyp errorów  ;>

//// knife_mod.sma
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(80) :
error 002: only a single statement (or expression) can follow each "case"
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(83) :
warning 209: function "knifemenu" should return a value
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(84) :
error 010: invalid function or declaration
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(85) :
error 010: invalid function or declaration
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(86) :
error 010: invalid function or declaration
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(87) :
error 010: invalid function or declaration
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(88) :
error 010: invalid function or declaration
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(92) :
error 054: unmatched closing brace
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(272) :
 error 021: symbol already defined: "SaveData"
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(300) :
 warning 203: symbol is never used: "SaveData"

a gdy tak dam 

public knifemenu(id, key) {
	switch(key) 
	{ 
                
                case 0:{ SetKnife(id , 4)
                if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_LEVEL_H))
                return PLUGIN_HANDLED;
                }
		case 1: SetKnife(id , 2)
		case 2: SetKnife(id , 3)
		case 3: SetKnife(id , 1)
		case 4: SetKnife(id , 0)
		default: return PLUGIN_HANDLED
	}
	SaveData(id)
	return PLUGIN_HANDLED
} 

kompiluje się (tam wyskakuje warrning o tabulacji (chyba xD )), ale nie działa po mojej myśli

Odpowiedz

  • +
  • -
retsam. - zdjęcie retsam. 06.03.2017

case 0: {if(is_user_connected(id) && (get_user_flags(id) & ADMIN_LEVEL_H)){SetKnife(id, 4)}}
Proszę :)
Użytkownik retsam. edytował ten post 06.03.2017 15:24
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 06.03.2017

case 0: {if(is_user_connected(id) && (get_user_flags(id) & ADMIN_LEVEL_H)){SetKnife(id, 4)}}
Proszę :)

 

//// knife_mod.sma
// C:\Documents and Settings\Witek\Pulpit\scripting WINDOWS\knife_mod.sma(79) :
error 001: expected token: ";", but found "}"
//
public knifemenu(id, key) {
	switch(key) 
	{ 
                
                case 0: {if(is_user_connected(id) && (get_user_flags(id) & ADMIN_LEVEL_H)){SetKnife(id, 4)}}
		case 1: SetKnife(id , 2)
		case 2: SetKnife(id , 3)
		case 3: SetKnife(id , 1)
		case 4: SetKnife(id , 0)
		default: return PLUGIN_HANDLED
	}
	SaveData(id)
	return PLUGIN_HANDLED
}  

^_-

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 06.03.2017

Ten kod, który się kompiluje jest poprawny. Wyjaśnij może, czemu nie działa po Twojej myśli?
Oczywiście upewniając się, że zmieniłeś odpowiedni case (jest kilka, każdy odnosi się do innego typu noża)

Oraz funkcję SetKnife() należy umieścić po tym warunku, lecz nie w nim (uwzględnieniając te 2 negacje w if'ie)
Użytkownik _McHappy edytował ten post 06.03.2017 16:56
Odpowiedz

  • +
  • -
retsam. - zdjęcie retsam. 06.03.2017

case 0: {
if(is_user_connected(id) && (get_user_flags(id) & ADMIN_LEVEL_H)){
SetKnife(id, 4)
} 
} 
Odpowiedz

  • +
  • -
RiderS - zdjęcie RiderS 06.03.2017

case 0: {
if(is_user_connected(id) && (get_user_flags(id) & ADMIN_LEVEL_H)){
SetKnife(id, 4)
} 
} 

dzięki  ;>

Happy wiem, że ciężko mi coś wytłumaczyć i dzięki że próbowałeś  :P

Można zrobić close  :lol:

Odpowiedz