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;
}
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);
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ó.