GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => A témát indította: Stricica - 2011. Március 22. - 19:02:05

Cím: sHitmanSystem
Írta: Stricica - 2011. Március 22. - 19:02:05
Hali.
Ez egy vérdíj-rendszer.
Íródott sscanf2 + zcmd-vel.
Sorok száma: 75.
Olyan félóra munka volt vele.
Parancsok:
 

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;
}
Cím: sHitmanSystem
Írta: CANNONN - 2011. Március 22. - 21:35:54
Csodás script! Szívesen máskor is. ;)
Cím: sHitmanSystem
Írta: Zsolesszka - 2011. Március 22. - 22:08:38
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);
Cím: sHitmanSystem
Írta: Stricica - 2011. Március 23. - 05:44:17
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ó.
Cím: sHitmanSystem
Írta: Darius Stone - 2011. Március 24. - 21:04:35
Jó lett grat.