Dabar yra 2020 Geg 28 23:56

Visos datos yra UTC + 2 valandos


Forumo taisyklės


Šiame forume galite siūlyti idėjas ar prašyti jums reikalingų pluginų. Jei kas nors pradės jį kurti, tai pasirašys Jūsų sukurtoje temoje. Niekada nepykite, jei niekas neatsako į Jūsų prašymą. Gal tai tiesiog per sudėtinga, arba reikalauja per daug darbo.



 Puslapis 11 [ 1 pranešimas ] 
Autorius Žinutė
 Pranešimo tema: Coin Plugin Problem FIX
Žinutės numeris: #1  StandartinėParašytas: 2020 Kov 31 17:21 
O taip. Jis jau surinko 50 žinučių!

Užsiregistravo: 2016 Spa 21 18:47
Pranešimai: 84
Karma: 0
Hello, I have a big problem with this plugin. Officially, the plugin should work as follows: You or someone kills a player, the killed player sometimes loses coins that are lying on the floor/ground. Now you should run to the coins and collect these coins. Then you get 1 coin by 1 coin. It also works, but the big problem is this: If you kill someone, you will automatically be credited with coins, sometimes 25, sometimes 65 and so on. Can someone help me or tell me how to fix the problem?


  1.  
  2. [#include <amxmodx>
  3. #include <fakemeta>
  4. #include <hamsandwich>
  5.  
  6. #define PLUGIN "Coins System"
  7. #define VERSION "1.0"
  8. #define AUTHOR "6u3oH"
  9.  
  10. #define CLASSNAME_DEFAULT "info_null"
  11. #define CLASSNAME_SET "info_coin"
  12. #define PATH_DATABASE "addons/amxmodx/data/coins_system.dat"
  13. #define COIN_MODEL "models/coin/mario_coin.mdl"
  14. #define COIN_SOUND "coin/coin.wav"
  15.  
  16. #define PDATA_KILLHEAD_OFFSET 75
  17. #define PDATA_KILLGREN_OFFSET 76
  18. #define PDATA_PLAYER_OFFSET 5
  19.  
  20. /*----------------------------------------------------------
  21.  ------------------------ ????????? ------------------------
  22.  ---------------------------------------------------------*/
  23.  
  24. #define VIP_FLAG ADMIN_LEVEL_H
  25.  
  26. #define COIN_GIVE_KILL 0 // Wie viele Münzen für einen einfachen Kill geben sollen
  27. #define COIN_GIVE_KILL_HEAD 1 // Wie viele Münzen für einen Kill am Kopf geben sollen
  28. #define COIN_GIVE_KILL_KNIFE 1 // Wie viele Münzen für einen Messertod geben sollen
  29. #define COIN_GIVE_KILL_GRENADE 1 // Wie viele Münzen zum Töten einer Granate geben sollen
  30.  
  31. #define COIN_DROP_COINS // Kommentiere die Zeile aus, damit keine Münzen aus dem Player fallen
  32. #define COIN_NUM_DROPKILL_MIN 1 // Die Mindestanzahl an Münzen, die fallen, wenn ein Spieler stirbt
  33. #define COIN_NUM_DROPKILL_MAX 2 // Die maximale Anzahl von Münzen, die fallen, wenn ein Spieler stirbt
  34.  
  35. #define COIN_TIME_REMOVE 10 // Nach wie vielen Sekunden werden die abgelegten Münzen entfernt (auskommentieren, damit sie erst am Ende der Runde entfernt werden)
  36.  
  37. /*----------------------------------------------------------
  38.  ------------------------ ????????? ------------------------
  39.  ---------------------------------------------------------*/
  40.  
  41. new g_iMaxPlayers;
  42. new g_iCoin[33];
  43.  
  44. public plugin_precache()
  45. {
  46.     precache_model(COIN_MODEL);
  47.     precache_sound(COIN_SOUND);
  48. }
  49.  
  50. public plugin_cfg() write_file(PATH_DATABASE, "[Datenbank] [Coins System]", 0);
  51. public client_connect(id) load_coins(id);
  52. public client_disconnected(id) save_coins(id);
  53.  
  54. public plugin_natives()
  55. {
  56.     register_native("get_user_coins", "get_user_coins", true)
  57.     register_native("set_user_coins", "set_user_coins", true)
  58. }
  59.  
  60. public get_user_coins(id) return g_iCoin[id];
  61. public set_user_coins(id, iNum) g_iCoin[id] = iNum;
  62.  
  63. public plugin_init()
  64. {
  65.     register_plugin(PLUGIN, VERSION, AUTHOR);
  66.    
  67.     #if defined COIN_DROP_COINS
  68.     RegisterHam(Ham_Killed, "player", "fw_KilledPlayerPost", true);
  69.     #endif
  70.     RegisterHam(Ham_Touch, CLASSNAME_DEFAULT, "fw_TouchCoinPost", true);
  71.     #if defined COIN_TIME_REMOVE
  72.     RegisterHam(Ham_Think, CLASSNAME_DEFAULT, "fw_ThinkCoinPost", true);
  73.     #endif
  74.    
  75.     register_logevent("event_RoundEnd", 2, "1=Round_End");
  76.  
  77.     g_iMaxPlayers = get_maxplayers();
  78.     set_task(2.0, "Task_HudMsg", .flags = "b");
  79. }
  80.  
  81. #if defined COIN_DROP_COINS
  82. public fw_KilledPlayerPost(iVictim, iAttacker, iCorpse)
  83. {
  84.     if(!is_user_connected(iVictim))
  85.         return;
  86.        
  87.     if(g_iCoin[iVictim] > 0)
  88.     {
  89.         new Float: fOrigin[3], Float: fVelocity[3];
  90.         pev(iVictim, pev_origin, fOrigin);
  91.        
  92.         new iRandom = random_num(COIN_NUM_DROPKILL_MIN, COIN_NUM_DROPKILL_MAX);
  93.        
  94.         for(new i; i <= iRandom; i++)
  95.         {
  96.             if(!g_iCoin[iVictim])
  97.                 return;
  98.            
  99.             new iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, CLASSNAME_DEFAULT));
  100.            
  101.             set_pev(iEnt, pev_classname, CLASSNAME_SET);
  102.             set_pev(iEnt, pev_origin, fOrigin);
  103.             set_pev(iEnt, pev_solid, SOLID_TRIGGER);
  104.             set_pev(iEnt, pev_movetype, MOVETYPE_BOUNCE);
  105.            
  106.             engfunc(EngFunc_SetSize, iEnt, Float: {-10.0, -10.0, -10.0}, Float: {10.0, 10.0, 10.0});
  107.             engfunc(EngFunc_SetModel, iEnt, COIN_MODEL);
  108.            
  109.             fVelocity[0] = random_float(10.0, 50.0);
  110.             fVelocity[1] = random_float(10.0, 50.0);
  111.             fVelocity[2] = random_float(100.0, 150.0);
  112.        
  113.             set_pev(iEnt, pev_velocity, fVelocity);
  114.            
  115.             #if defined COIN_TIME_REMOVE
  116.             set_pev(iEnt, pev_nextthink, get_gametime() + COIN_TIME_REMOVE);
  117.             #endif
  118.         }
  119.     }
  120.        
  121.     if(!is_user_connected(iAttacker))
  122.         return;
  123.    
  124.     if(iVictim == iAttacker)
  125.         return;
  126.    
  127.     new iGiveCoin = g_iCoin[iAttacker];
  128.    
  129.     if(get_pdata_int(iVictim, PDATA_KILLGREN_OFFSET) & DMG_GRENADE)
  130.         g_iCoin[iAttacker] += COIN_GIVE_KILL_GRENADE;
  131.     else if(iAttacker == pev(iVictim, pev_dmg_inflictor) && get_user_weapon(iAttacker) == CSW_KNIFE)
  132.         g_iCoin[iAttacker] += COIN_GIVE_KILL_KNIFE;
  133.     else if(get_pdata_int(iVictim, PDATA_KILLHEAD_OFFSET, PDATA_PLAYER_OFFSET) == HIT_HEAD)
  134.         g_iCoin[iAttacker] += COIN_GIVE_KILL_HEAD;
  135.     else
  136.         g_iCoin[iAttacker] += COIN_GIVE_KILL;
  137.        
  138.     if(get_user_flags(iAttacker) & VIP_FLAG)
  139.         g_iCoin[iAttacker] *= 2;
  140.        
  141.     iGiveCoin = g_iCoin[iAttacker] - iGiveCoin;
  142.        
  143.     set_hudmessage(0, 255, 0, -1.0, 0.26, 0, 0.1, 2.0, 0.1, 0.1, 3);
  144.     show_hudmessage(iAttacker, "+%i ?????", iGiveCoin);
  145. }
  146.  
  147. public fw_TouchCoinPost(iEnt, id)
  148. {
  149.     if(!pev_valid(iEnt) || !is_user_alive(id))
  150.         return;
  151.            
  152.     static sClassName[32];
  153.     pev(iEnt, pev_classname, sClassName, charsmax(sClassName));
  154.        
  155.     if(!equal(sClassName, CLASSNAME_SET))
  156.         return;
  157.        
  158.     g_iCoin[id]++;
  159.     emit_sound(id, CHAN_WEAPON, COIN_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
  160.    
  161.     set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  162. }
  163. #endif
  164.  
  165. #if defined COIN_TIME_REMOVE
  166. public fw_ThinkCoinPost(iEnt)
  167. {
  168.     if(!pev_valid(iEnt))
  169.         return;
  170.        
  171.     static sClassName[32];
  172.     pev(iEnt, pev_classname, sClassName, charsmax(sClassName));
  173.    
  174.     if(!equal(sClassName, CLASSNAME_SET))
  175.         return;
  176.        
  177.     set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  178. }
  179. #endif
  180.  
  181. public event_RoundEnd()
  182. {
  183.     new iEnt = FM_NULLENT;
  184.    
  185.     while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", CLASSNAME_SET)))
  186.         if(pev_valid(iEnt))
  187.             set_pev(iEnt, pev_flags, pev(iEnt, pev_flags) | FL_KILLME);
  188. }
  189.  
  190. public Task_HudMsg()
  191. {
  192.     set_hudmessage(200, 200, 200, 0.01, 0.90, 0, 0.1, 1.0, 0.1, 0.1, 4);
  193.    
  194.     for(new id = 1; id < g_iMaxPlayers; id++)
  195.     {
  196.         if(!is_user_alive(id))
  197.             continue;
  198.        
  199.         show_hudmessage(id, "???? ??????: %i", g_iCoin[id]);
  200.     }
  201. }
  202.  
  203. public load_coins(id)
  204. {
  205.     new iLine = 1, iLen, sData[64], sKey[38], sAuthID[38];
  206.     get_user_authid(id, sAuthID, charsmax(sAuthID));
  207.    
  208.     while((iLine = read_file(PATH_DATABASE, iLine, sData, charsmax(sData), iLen)))
  209.     {
  210.         parse(sData, sKey, 37);
  211.        
  212.         if(equal(sKey, sAuthID))
  213.         {
  214.             parse(sData, sKey, 37, sKey, 37);
  215.             g_iCoin[id] = str_to_num(sKey);
  216.            
  217.             return;
  218.         }
  219.     }
  220.    
  221.     g_iCoin[id] = 0;
  222. }
  223.  
  224. public save_coins(id)
  225. {
  226.     new iLine = 1, iLen, sData[64], sKey[38], sAuthID[38];
  227.     get_user_authid(id, sAuthID, charsmax(sAuthID));
  228.    
  229.     while((iLine = read_file(PATH_DATABASE, iLine, sData, charsmax(sData), iLen)))
  230.     {
  231.         parse(sData, sKey, 37);
  232.        
  233.         if(equal(sKey, sAuthID))
  234.         {
  235.             format(sData, charsmax(sData), "%s %i", sAuthID, g_iCoin[id]);
  236.             write_file(PATH_DATABASE, sData, iLine-1);
  237.            
  238.             return;
  239.         }
  240.     }
  241.    
  242.     format(sData, charsmax(sData), "%s %i", sAuthID, g_iCoin[id]);
  243.     write_file(PATH_DATABASE, sData, -1);
  244. }
  245.  


Atsijungęs
 Aprašymas  
 
Rodyti paskutinius pranešimus:  Rūšiuoti pagal  
 Puslapis 11 [ 1 pranešimas ] 

Visos datos yra UTC + 2 valandos


Dabar prisijungę

Vartotojai naršantys šį forumą: Registruotų vartotojų nėra ir 2 svečių


Jūs negalite kurti naujų temų šiame forume
Jūs negalite atsakinėti į temas šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite trinti savo pranešimų šiame forume
Jūs negalite prikabinti failų šiame forume

Ieškoti:
Pereiti į: