←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Zombie Plague 4.3
Problem z bugowaniem AP

  • +
  • -
Qes - zdjęcie Qes 12.03.2014

Witam,

Może ktoś sprawdzić ten kod i powiedziec czy jest możliwość zbugowania go?
Z tego co ostatnio usłyszałem niektórzy gracz potraifą zbugować sobie AP (dodawać w nieskończoność), wszystko pokazuje że jest to wina tego pluginu.

#include <amxmodx>
#include <cstrike>
#include <zombieplague>
#include <colorchat>

#define    PLUGIN    "[ZP] Ammo Donate"
#define    VERSION    "1.6"
#define    AUTHOR    "Rubick"

new players_menu, players[32], num, i
new accessmenu, iName[64], callback

public plugin_init()
{    
register_plugin(PLUGIN, VERSION, AUTHOR) 
register_clcmd("say /donate", "transfer_menu", ADMIN_ALL, "")
register_clcmd("say /daj", "transfer_menu", ADMIN_ALL, "")
register_clcmd("transfer", "transfer_ammo", ADMIN_ALL, "")
}

public transfer_menu(id)
{   
get_players(players, num, "h")       
if (num <= 1)  
{   
ColorChat(id,RED,"[ZP]^x01 Nie ma nikogo na serwerze aby przekazac Ammo Packi", id)
return PLUGIN_HANDLED    
}   
    
new tempname[32], info[10]  
  
players_menu = menu_create("Gracze", "players_menu_handler")  
 
for(i = 0; i < num; i++) 
{       
if(players[i] == id)           
continue  
             
get_user_name(players[i], tempname, 31)       
num_to_str(players[i], info, 9)       
menu_additem(players_menu, tempname, info, 0)    
}       
menu_setprop(players_menu, MPROP_EXIT, MEXIT_ALL)  

menu_display(id, players_menu, 0)   
return PLUGIN_CONTINUE
}

public players_menu_handler(id, players_menu, item)
{ 
if(item == MENU_EXIT)   
{       
menu_destroy(players_menu)       
return PLUGIN_HANDLED   
}    
   
new data[6]  
 
menu_item_getinfo(players_menu, item, accessmenu, data, charsmax(data), iName, charsmax(iName), callback) 

new player = str_to_num(data)  
      
client_cmd(id, "messagemode ^"transfer %i^"", player)  

return PLUGIN_CONTINUE
}

public transfer_ammo(id)
{    
new param[6]    
read_argv(2, param, charsmax(param))

for (new x; x < strlen(param); x++)    
{       
if(!isdigit(param[x]))       
{                 
ColorChat(id,RED,"[ZP]^x01 Wpisz Liczbe", id)    
return 0        
}    
}    
   
new amount = str_to_num(param)   
    
new ammo = zp_get_user_ammo_packs(id) 

if (ammo < amount)    
{             
ColorChat(id,RED,"[ZP]^x01 Nie masz tylu Ammo Packow aby przekazac !", id)    
return 0    
} 
      
read_argv(1, param, charsmax(param))   
new player = str_to_num(param) 
      
new player_ammo = zp_get_user_ammo_packs(player)

zp_set_user_ammo_packs(id, ammo - amount)    
zp_set_user_ammo_packs(player, player_ammo + amount)    
   
new names[2][32]        

get_user_name(id, names[0], 31)    
get_user_name(player, names[1], 31)        

ColorChat(0,RED,"[ZP]^x01 Gracz %s przekazal %i ^x03Ammo Packow ^x01dla %s", names[0], amount, names[1] )
return 0
}
Odpowiedz

  • +
  • -
MaroTM - zdjęcie MaroTM 26.02.2016

Sorry za odkop, ale mam nadzieję, że pomogę innym, którzy dalej nie wiedzą jak to naprawić.

Otwórz *.sma pluginu.

Znajdź:

		zp_set_user_ammo_packs(id, ammo - amount)    
		zp_set_user_ammo_packs(player, player_ammo + amount)

Zamień na:

	if (id == player)
	{
		console_print(id, "Chcesz bugowac AP? Nieladnie... :)");
		return 0
	}
	else
	{
		zp_set_user_ammo_packs(id, ammo - amount)    
		zp_set_user_ammo_packs(player, player_ammo + amount)
	}

Zapisz, skompiluj *.sma i wrzuć na serwer.

 

 

Bug polegał na tym, że transferowało się AP sobie samemu i się nie odejmowało.

Dodałem warunek jeżeli chce się samemu sobie wysłać AP to wyskakuje wiadomość, jeżeli nie spełnia się warunku to przekazuje AP.

Pozdrawiam.

 


Użytkownik MaroTM edytował ten post 26.02.2016 15:05
Odpowiedz