Szerző Téma: sHitmanSystem  (Megtekintve 1910 alkalommal)

sHitmanSystem
« Dátum: 2011. március 22. - 19:02:05 »
0 Show voters
Hali.
Ez egy vérdíj-rendszer.
Íródott sscanf2 + zcmd-vel.
Sorok száma: 75.
Olyan félóra munka volt vele.
Parancsok:
 
  • /verdij [playerid] [összeg] - vérdíj kitûzése

  • /verdijak - az aktuális vérdíjak megtekintése


Solidfiles
Sok köszönet Roliii-nak és Cannonn-nak a tesztelésért.  :P
[gmod]Mivel a letöltõ link szerint a fájlt eltávolították és nekem megvan ezért feltettem ide code tagek közé.[/gmod]
 
#include <a_samp>
#include <sscanf2>
#include <zcmd>
enum Info
{
Bounty
};
new HitmanInfo[MAX_PLAYERS][info];
#define COLOR_RED 0x9f1212FF
#define COLOR_WHITE 0xFFFFFFFF
#define DIALOG_VERDIJAK 9751
stock GetName(playerid)
{
    new name[16];
    GetPlayerName(playerid, name, 16);
    return name;
}
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" sHitmanSystem by: Stricica\");
print(\"--------------------------------------\\n\");
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(GetPVarInt(playerid, \"Wanted\") == 1)
{
new string[128];
GivePlayerMoney(killerid, HitmanInfo[playerid][bounty]);
format(string, sizeof(string), \"[{9cff00}%s{FFFFFF}] kilett iktatva [{9cff00}%s{FFFFFF}] által. Vérdíj-jutalom: [{9cff00}%i{FFFFFF}]\", GetName(playerid), GetName(killerid), HitmanInfo[playerid][bounty]);
SendClientMessageToAll(COLOR_WHITE, string);
SetPVarInt(playerid, \"Wanted\", 0);
HitmanInfo[playerid][bounty] = 0;
}
return 1;
}
CMD:verdij(playerid, params[])
{
new id, bounty, string[128];
    if(sscanf(params, \"ui\", id, bounty)) SendClientMessage(playerid, COLOR_RED, \"Használat: /verdij [playerid] [összeg]\");
    if(id == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"Hiba: Nincs ilyen játékos.\");
    if(id == playerid) return SendClientMessage(playerid, COLOR_RED, \"Hiba: Magadra nem tudsz vérdíjat kitûzni.\");
    if(GetPlayerMoney(playerid) < bounty) return SendClientMessage(playerid, COLOR_RED, \"Hiba: Nincs elég pénzed a vérdíjra.\");
    if(IsPlayerNPC(id)) return SendClientMessage(playerid, COLOR_RED, \"Hiba: NPC-re nem lehet vérdíjat tûzni.\");
else {
SetPVarInt(id, \"Wanted\", 1);
HitmanInfo[id][bounty] = bounty;
GivePlayerMoney(playerid, -bounty);
format(string, sizeof(string), \"[{9cff00}%s{FFFFFF}] vérdíjat tûzött ki [{9cff00}%s{FFFFFF}] fejére. Összeg: [{9cff00}%i{FFFFFF}]\", GetName(playerid), GetName(id), bounty);
SendClientMessageToAll(COLOR_WHITE, string);
}
return 1;
}
CMD:verdijak(playerid, params[])
{
    for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPVarInt(i, \"Wanted\") == 1)
{
new string[128];
format(string, sizeof(string), \"[{9cff00}%s{FFFFFF}] - [{9cff00}%i ${FFFFFF}]\", GetName(i), HitmanInfo[bounty]);
SendClientMessage(playerid, COLOR_WHITE, string);
}
}
return 1;
}
« Utoljára szerkesztve: 2012. július 15. - 11:26:01 írta ɐʞzssǝlosz »

Nem elérhető CANNONN

  • 2139
    • Profil megtekintése
sHitmanSystem
« Válasz #1 Dátum: 2011. március 22. - 21:35:54 »
0 Show voters
Csodás script! Szívesen máskor is. ;)
« Utoljára szerkesztve: 2012. március 15. - 09:50:19 írta Cannonn »

sHitmanSystem
« Válasz #2 Dátum: 2011. március 22. - 22:08:38 »
0 Show voters
Grat egyszerû nagyszerû. :D
Egy apró megjegyzés ha ez nem lesz túl sértõ meg egy javaslat is lenne egyben.
Látom hogy két változót használsz erre a hitman dologra.
Az egyik: (egy megszokott változó pawnban)
 

enum Info
{
Bounty
};
new HitmanInfo[MAX_PLAYERS][info];
(most nem térek ki rá hogy egy adat tárolásra játékosonként felesleges az enum. nem ez lenne a lényeg)

 
A másik: (PerPlayerVariable)
 

SetPVarInt(id, \"Wanted\", 1);

 
És itt jön a kérdés:
Nem lenne erre a célra elég egy változó használat? mondjuk a PVar.
Mert alapból minden PVar értéke nulla (0)
Ha valaki valakire tesz vérdíjat te beállítod a PVar-ra a vérdíj összeget.
 

SetPVarInt(id, \"Wanted\", bounty);

 
És lekérdezésnél OnPlayerDeath-nél, ellenõrzõd hogy van-e rajt vérdíj, persze érdemes létrehozni egy változót amiben tároljuk ezt az adatot mert többször fel kell használni a tárolt információt.
 

if(GetPVarInt(playerid, \"Wanted\") > 0)
//////////////////////////////////////////////////////////
new
       verdíj = GetPVarInt(playerid, \"Wanted\");
if(verdij > 0)
{
GivePlayerMoney(killerid, verdíj);
format(bla bla ennyi pénzt kaptál....., verdij
....

 
És most hogy ezt leírtam egy újabb hibát láttam 8) Nem sértés tényleg csak felhívom rá a figyelmed.
Ha valaki tesz egy játékosra vérdíjat, mondjuk 10000-et, és egy másik játékos is tesz ugyanarra a playerre mondjuk 10-et, akkor csak 10 lesz rajt.
 

Rossz:
[code]
HitmanInfo[id][bounty] = bounty;

 
Helyes:
 

HitmanInfo[id][bounty] += bounty;

 
És ugyanez PVarban:
 

SetPVarInt(playerid, \"Wanted\", GetPVarInt(playerid, \"Wanted\") + bounty);

sHitmanSystem
« Válasz #3 Dátum: 2011. március 23. - 05:44:17 »
0 Show voters
Idézetet írta: Zsolesszka date=1300828118\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7031\" data-ipsquote-contentclass=\"forums_Topic
Grat egyszerû nagyszerû. :D
Egy apró megjegyzés ha ez nem lesz túl sértõ meg egy javaslat is lenne egyben.
Látom hogy két változót használsz erre a hitman dologra.
Az egyik: (egy megszokott változó pawnban)
 

enum Info
{
Bounty
};
new HitmanInfo[MAX_PLAYERS][info];
(most nem térek ki rá hogy egy adat tárolásra játékosonként felesleges az enum. nem ez lenne a lényeg)

 
A másik: (PerPlayerVariable)
 

SetPVarInt(id, \"Wanted\", 1);

 
És itt jön a kérdés:
Nem lenne erre a célra elég egy változó használat? mondjuk a PVar.
Mert alapból minden PVar értéke nulla (0)
Ha valaki valakire tesz vérdíjat te beállítod a PVar-ra a vérdíj összeget.
 

SetPVarInt(id, \"Wanted\", bounty);

 
És lekérdezésnél OnPlayerDeath-nél, ellenõrzõd hogy van-e rajt vérdíj, persze érdemes létrehozni egy változót amiben tároljuk ezt az adatot mert többször fel kell használni a tárolt információt.
 

if(GetPVarInt(playerid, \"Wanted\") > 0)
//////////////////////////////////////////////////////////
new
       verdíj = GetPVarInt(playerid, \"Wanted\");
if(verdij > 0)
{
GivePlayerMoney(killerid, verdíj);
format(bla bla ennyi pénzt kaptál....., verdij
....

 
És most hogy ezt leírtam egy újabb hibát láttam 8) Nem sértés tényleg csak felhívom rá a figyelmed.
Ha valaki tesz egy játékosra vérdíjat, mondjuk 10000-et, és egy másik játékos is tesz ugyanarra a playerre mondjuk 10-et, akkor csak 10 lesz rajt.
 

Rossz:
[code]
HitmanInfo[id][bounty] = bounty;

 
Helyes:
 

HitmanInfo[id][bounty] += bounty;

 
És ugyanez PVarban:
 

SetPVarInt(playerid, \"Wanted\", GetPVarInt(playerid, \"Wanted\") + bounty);

 

Köszi. :)
Amúgy alapból kettõ PVar volt. Egy arra hogy vérdíjas, és egy az összegre, de amikor megöltük akire tûzték akkor nem írta ki mennyit kap, és csak a pénzt kapta meg. Ezért lett 2 különféle változó.

sHitmanSystem
« Válasz #4 Dátum: 2011. március 24. - 21:04:35 »
0 Show voters
Jó lett grat.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal