[Release] Statuspunkte schnell setzen by Yiv & Eligara-Network

02/21/2015 03:21 Yiv#1
[Only registered and activated users can see links. Click Here To Register...]

Liebe Community,

da der liebe [Sensenmann] vor exakt 1 Sekunde [Only registered and activated users can see links. Click Here To Register...] releast hat, hier nun meine Version - im Source.

Syntax:
Es erlaubt euch, eure Statuspunkte folgendermaßen zu setzen: /stat <TYPE> <VALUE>
TYPE ist einer dieser Werte: ht, st, dx, iq
VALUE ist die Anzahl der Statuspunkte, die gesetzt werden sollen

Beispiel:
/stat st 50
STR würde nun um 50 erhöht werden.

Falls mit der Erhöhung die maximale Anzahl an Statuspunkten auf einen Status überschritten wird, wird der Wert maximal gesetzt.


How-To:
Im Server-Source in der Datei cmd_general.cpp nach ACMD(do_stat) suchen und die komplette Funktion durch folgendes ersetzen:
Code:
ACMD(do_stat)
{
	char arg1[256];
	char arg2[256];
	two_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2));

	if (!*arg1)
		return;

	int iStatUp = 1;
	if (*arg2)
		iStatUp = atoi(arg2);

	if (ch->IsPolymorphed())
	{
		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("µÐ°© Áß¿¡´Â ´É·ÂÀ» ¿Ã¸± ¼ö ¾ø½À´Ï´Ù."));
		return;
	}

	if (ch->GetPoint(POINT_STAT) < iStatUp)
		iStatUp = ch->GetPoint(POINT_STAT);

	BYTE idx = 0;
	
	if (!strcmp(arg1, "st"))
		idx = POINT_ST;
	else if (!strcmp(arg1, "dx"))
		idx = POINT_DX;
	else if (!strcmp(arg1, "ht"))
		idx = POINT_HT;
	else if (!strcmp(arg1, "iq"))
		idx = POINT_IQ;
	else
		return;

	if ((ch->GetRealPoint(idx) + iStatUp) > MAX_STAT)
		iStatUp = MAX_STAT - ch->GetRealPoint(idx);

	if (iStatUp < 1)
		return;

	ch->SetRealPoint(idx, ch->GetRealPoint(idx) + iStatUp);
	ch->SetPoint(idx, ch->GetPoint(idx) + iStatUp);
	ch->ComputePoints();
	ch->PointChange(idx, 0);

	if (idx == POINT_IQ)
	{
		ch->PointChange(POINT_MAX_HP, 0);
	}
	else if (idx == POINT_HT)
	{
		ch->PointChange(POINT_MAX_SP, 0);
	}

	ch->PointChange(POINT_STAT, -iStatUp);
	ch->ComputePoints();
}
In Verbindung mit Modifikationen am UI-Script im Client könnte das ganze auch noch sehr schön eingebunden werden. Wie das dann aussehen kann, werdet ihr in Kürze auf Aligra bewundern können.
Achtung, das ganze ist - bis jetzt - noch nicht getestet.

Special Thanks:
  • [Sensenmann]
  • Akkelos
  • Poccix
  • NyBu
  • Lee
  • Sippel
  • Luki
  • DasSchwarzeT
  • DreamT
  • Epvp User






Banana for scale
[Only registered and activated users can see links. Click Here To Register...]

Sorry for the long post, here's a potato
[Only registered and activated users can see links. Click Here To Register...]







MfG
02/21/2015 03:21 rollback#2
Habe dir gerne dabei geholfen. :) <3 :*

Gallery

MfG
02/21/2015 03:24 Alekos#3
Bitte alle mal einbauen, hast du schön gemacht :)
02/21/2015 03:27 Lefloyd#4
Weil ich so toll bin flame ich Yiv auch noch voll: schon wieder eine Kartoffel und eine Banane? ._____. Nächstes mal erwarte ich mehr.

@Topic:
Nunja, so Ähnlich wie beim Sensi, kann gut helfen ^_^
02/21/2015 09:25 [-Lee-]#5
Das ist aber schön geworden. Der Code gefällt mir. Besser als das von Sensenmann.
02/21/2015 10:50 Rainer Wahnsinn#6
Ist der Befehl auch für User zugänglich oder ausschließlich für Admins?
Denn für diese gibt es bereits einen.
02/21/2015 10:56 Poccix#7
Der Befehl für "Admins" kann auch von User'n benutzt werden. :)
Gutes Ding :)
02/21/2015 11:08 i[Remix]#8
Ihr solltet euch mal abgewöhnen, bei YMIR manche Sachen "abzuschreiben" bzw einfach zu übernehmen. Der Codestil von YMIR ist einfach nicht wirklich schön.

Damit meine ich z.B das:

Code:
char arg1[256];
char arg2[256];
Ist im Grunde nichts Schlimmes, kann man aber trotzdem schöner und kürzer schreiben.
Stattdessen kann man es auch einfach so schreiben:

Code:
char arg1[256], arg2[256];

Bei der Stelle:

Code:
if (ch->GetPoint(POINT_STAT) < iStatUp)
	return;
kann man es auch so machen:

Code:
if (ch->GetPoint(POINT_STAT) < iStatUp)
	iStatUp = ch->GetPoint(POINT_STAT);
Oder auch:

Code:
iStatUp = (ch->GetPoint(POINT_STAT) > iStatUp ? ch->GetPoint(POINT_STAT) : iStatUp);
Die zweite Variante wäre aber auch nur zur Verkürzung aber damit würde bei einem höheren Wert einfach auf die vorhandenen Statuspunkte gesetzt werden.
Würde ich persönlich besser finden.

Wurde hier ja auch gemacht:

Code:
if ((ch->GetRealPoint(idx) + iStatUp) > MAX_STAT)
	iStatUp = MAX_STAT - ch->GetRealPoint(idx);
Ansonsten ganz gut geschrieben.

Hoffe ihr empfindet meine relativ seltene konstruktive "Kritik" bzw Meinung nicht als Hate oder sonst was :D
02/21/2015 11:09 Alergix2#9
Dankeschön :)
Aufjedenfall wird das genutzt :D
02/21/2015 16:54 [SA]Hylight#10
Also hatte das schon aufn den 2089 files ??
nur nicht mit /stat sondern
/dex value /int value /str value /vit value hmm
02/21/2015 17:04 [-Lee-]#11
Quote:
Originally Posted by [SA]Hylight View Post
Also hatte das schon aufn den 2089 files ??
nur nicht mit /stat sondern
/dex value /int value /str value /vit value hmm
schön .. und jetzt? Was tut das zur sache?
02/21/2015 20:08 maqabra#12
Bug! Can't add points in the panel only on chat.
02/21/2015 22:17 [SA]Hylight#13
Quote:
Originally Posted by [-Lee-] View Post
schön .. und jetzt? Was tut das zur sache?
ich hab nur gefragt hätte ja sein können das es von ymir schon drinne war..
dein Kommentar hingegen ist sinnlos Mr Incredible allwissender -Lee-:handsdown:
02/21/2015 23:45 xCPx#14
leute? aber euch is bewusst dass zb /iq 99 schon immer ging oder?
02/21/2015 23:47 DasSchwarzeT#15
Quote:
Originally Posted by xCPx View Post
leute? aber euch is bewusst dass zb /iq 99 schon immer ging oder?
Geht das nicht nur als GM?