Изграждане на сложни екипи
Научете се да пишете сложни команди, които изискват допълнителни параметри след интервал.
Функция strtok - това е функция, използвана за дефиниране на интервал между команда и параметър.
Помислете за екип за парични преводи.
Първо, трябва в началото на функцията за автоматично повикване OnPlayerCommandText всички изброени
променливи:
нов низ [255];
нов cmd [256];
нов плейърни пари;
ново име на подател [MAX_PLAYER_NAME];
нов подарък играч [MAX_PLAYER_NAME];
нов giveplayerid, пари, idx;
cmd = strtok (cmdtext, idx);
Променлива низ ще съхраним текста на съобщението за прехвърляне на пари между играчи, cmd ще съхранява целия текст на командата. Име на подател ще съхранява името на играча, който дава парите, giveplayer - името на получателя.
Променлива giveplayerid ще съхранява идентификатора на играча, който получава парите, парите ще съхраняват сумата на преведените пари, а idx ще съхранява параметрите на командата.
Сега всъщност започваме да анализираме самата команда.
След променливите в променливата cmd дефинирайте интервала между командата и параметъра. Всичко започва с
най-простата команда:
if (strcmp (cmd, "/ givemoney", true) == 0)
връщане 0;
>
В тази команда пишем следното:
нов tmp [256];
tmp = strtok (cmdtext, idx);
ако (! strlen (tmp))
SendClientMessage (playerid, COLOR_WHITE, "Enter:/givemoney [идентификатор на играча] [количество]");
връщане 1;
>
giveplayerid = strval (tmp);
tmp = strtok (cmdtext, idx);
ако (! strlen (tmp))
SendClientMessage (playerid, COLOR_WHITE, "Enter:/givemoney [идентификатор на играча] [количество]");
връщане 1;
>
пари = strval (tmp);
Създайте променлива tmp, който ще съхранява параметрите на командата, това е текстът след интервала.
Дефинирано от функция strtok, проблеми между командата и параметъра .
Поставяме условие, ако параметърът не е въведен, изпратете съобщение до чата.
Присвояване на променлива giveplayerid, стойността на първия параметър, който въведохме.
Отново дефинирайте интервал, но между двата параметъра. Тъй като отборът въвежда 2 параметъра: идентификатор на играча и сума пари.
Също така проверяваме дали параметърът е въведен и го присвояваме на променливата пари, стойността на параметъра 2, който въведохме в командата.
Ето пример:
Въведохте командата: / givemoney 1 400.
Променлива giveplayerid получава стойността на 1 параметър, т.е. ще бъде равна на 1, променливата пари получава стойността на 2 параметъра и ще бъде равна на 400.
След това пишем проверка дали играчът, който получава пари, е свързан със сървъра.
if (IsPlayerConnected (giveplayerid))
GetPlayerName (giveplayerid, giveplayer, sizeof (giveplayer));
GetPlayerName (playerid, sendername, sizeof (sendername));
playermoney = GetPlayerMoney (playerid);
Вътрешна проверка по функция GetPlayerName получаваме имената и на двамата играчи.
Променлива playermoney ние определяме сумата на играча, който прехвърля пари.
И така, ние знаем текущата сума на парите на играча и сумата, която играчът иска да прехвърли, сега трябва да поставим условие играчът да прехвърля сумата на парите не повече от сумата, която има при себе си, ние напишете следното условие:
ако (пари> 0 && playermoney> = пари)
GivePlayerMoney (playerid, (0 - пари));
GivePlayerMoney (giveplayerid, пари);
формат (низ, размер на (низ), "Предадохте% s (id:% d), $% d.", giveplayer, giveplayerid, пари));
SendClientMessage (playerid, COLOR_YELLOW, низ);
format (string, sizeof (string), "Получихте $% d от% s (id:% d).", пари, име на подател, playerid);
SendClientMessage (giveplayerid, COLOR_YELLOW, низ);
>
друго
SendClientMessage (playerid, COLOR_YELLOW, "Не можете да изпращате толкова пари.");
>
Прочетох условието:
ако сумата, която играчът иска да прехвърли на друг играч (пари) по-голяма от 0 и сумата пари, която той има (playermoney) е по-голяма или равна на сумата, която той иска да прехвърли (пари), тогава прехвърляме пари на играча от функцията
GivePlayerMoney. Отнемаме сумата на преведените пари от играча, който предава, и го даваме на играча, който получава парите.
Е, не забравяйте да проверите връзката на играча, който получава парите, които да сложи друго, действие, ако плейърът не е свързан към сървъра.
>
друго
формат (низ, размер на (низ), "% d не е свързан със сървъра.", giveplayerid);
SendClientMessage (playerid, COLOR_YELLOW, низ);
>
Ако въпреки това, когато компилира скрипта, pawno ще се кълне в strtok, добавете тази функция към скрипта: