PDA

Просмотр полной версии : [Вопрос] Снимаем деньги с пассажира.



Skyline
22.08.2016, 04:07
Здравствуйте, подскажите, как для такси сделать, чтобы когда садились пассажиры, каждые 30 секунд снимались деньги с него, а при выходе, все что заработало, давалось водителю. Буду очень благодарен.

Нашел такую функцию как GetPlayerVehicleSeat, так вот 1,2,3 места - это пассажир, я думаю, что когда пассажир садится в мшину, нужно запускать таймер, с повтором на каждые 30 секунд. Вот так:


if(DogovorTaxi{playerid} == true)
{
new mesto = GetPlayerVehicleSeat(playerid);
if(mesto == 1 && mesto == 2 && mesto == 3)
{
taxitimer = SetTimer("TaxiTime", 30000, true);
}
}

Как осуществить остальное, не могу сообразить.(

vovandolg
22.08.2016, 05:12
Ну вот где ты видел даже в рили чтобы ты ехал в такси и закидывал деньгами бомбилу каждые 30 сек,
ты сел в тачку сказал куда ехать пока вы ехали километраж мотал счётчик и когда ты собрался выходить тогда уже и заплатил за пройденный километраж
Тут тебе так если с жизни пример взять надо при выходе оплату делать, а вот как ты считать будешь сколько проехал или сколько просидел он в машине уже на своё усмотрение:don-t_mention:

И да кстате:


if(mesto == 1 && mesto == 2 && mesto == 3)// сидеть на 3 местах сразу невозможно

if(mesto == 1 || mesto == 2 || mesto == 3)//так наверное надо было

Skyline
22.08.2016, 07:20
Я и не сказал чтобы каждые каждые 30 сек закидывали деньгами. Нужно чтобы прибавлялись они, ну например по 15$ за каждые 30 сек, вот сколько проедет, столько и получит в конце. Осуществить просто не пойму как с проверкой на пассажира и деньгами.

DeimoS
22.08.2016, 16:01
Я и не сказал чтобы каждые каждые 30 сек закидывали деньгами. Нужно чтобы прибавлялись они, ну например по 15$ за каждые 30 сек, вот сколько проедет, столько и получит в конце. Осуществить просто не пойму как с проверкой на пассажира и деньгами.
Когда игрок садиться в авто, проверяй, сел ли он в такси и сел ли он пассажиром. Если всё сошлось, записывай gettime в массив и когда игрок авто покидает, текущее значение gettime отнимай от записанного. Это и будет время, которое игрок просидел в авто. Далее дели его на 30 (если ты хочешь, чтоб каждые 30 секунд снимало деньги) и умножай на сумму, которую ты хочешь отнимать каждые 30 секунд.
Получится как-то так

(gettime()-array)/30*15
Это и выйдет сумма, которую нужно отнять у пассажира и отдать водителю

Skyline
23.08.2016, 02:33
А я сделал так.


if(vehicleid >= taxicar[0] && vehicleid <= taxicar[1])
{
if(DogovorTaxi{playerid} == true)
{
new mesto = GetPlayerVehicleSeat(playerid);
if(mesto == 1 || mesto == 2 || mesto == 3)
{
taxitimer = SetTimer("TaxiTime", 30000, true);
}
}
}
При посадке пассажира в такси, запускается таймер, на повтор каждые 30 сек.

public TaxiTime(playerid)
{
new giveplayerid;
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid >= taxicar[0] && vehicleid <= taxicar[1])
{
if(DogovorTaxi{playerid} == true)
{
new mesto = GetPlayerVehicleSeat(playerid);
if(mesto == 1 || mesto == 2 || mesto == 3)
{
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
PlayerInfo[giveplayerid][MONEY] -= moneys;
PlayerInfo[playerid][ZP] += moneys;
}
}
}
return 1;
}

Отнимаю деньги у игрока который в Такси, а водителю в ЗП добавляю эту сумму.

А в OnPlayerExitVehicle

if(DogovorTaxi{playerid} == true)
{
new mesto = GetPlayerVehicleSeat(playerid);
if(mesto == 1 || mesto == 2 || mesto == 3)
{
new string[50];
new giveplayerid;
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
DogovorTaxi{playerid} = false;
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "Вы покинули такси и заплатили $%s", moneys);
SendClientMessage(giveplayerid, COLOR_GREEN, string);
PlayerInfo[giveplayerid][MONEY] += moneys;
format(string, sizeof(string), "Клиент покинул такси, вы заработали $%s", moneys);
SendClientMessage(playerid, COLOR_GREEN, string);
PlayerInfo[playerid][ZP] += moneys;
}
}

Так не верно?

Saibot
23.08.2016, 02:49
Тебе выше написали, как можно обойтись без таймера, и как правильно сделать.


Так не верно?
А, что мешает проверить?

vovandolg
23.08.2016, 03:32
Зачем узнавать никнейм если ты его не используешь в коде?

Skyline
23.08.2016, 04:15
Да я вообще запутался, не могу сообразить как и что. Да DeimoS дал путь к решению, но я не могу додумать и сообразить как это будет все в коде(

- - - Добавлено - - -

Так же записать данные в массив?

SetPVarInt(playerid,"Taxi",gettime());
И так получается нужно вывести сумму?

SetPVarInt(playerid,"Taxi",(gettime())/30*moneys );

nikvlad
23.08.2016, 12:23
Да я вообще запутался, не могу сообразить как и что. Да DeimoS дал путь к решению, но я не могу додумать и сообразить как это будет все в коде(

- - - Добавлено - - -

Так же записать данные в массив?

SetPVarInt(playerid,"Taxi",gettime());
И так получается нужно вывести сумму?

SetPVarInt(playerid,"Taxi",(gettime())/30*moneys );

new PlayerEnterTaxi[MAX_PLAYERS];

В OnPlayerEnterVehicle:

if(проверка на такси, место в салоне и т.д)
{
PlayerEnterTaxi[playerid] = gettime();
}

В OnPlayerLeaveVehicle:

if(проверки..)
{
GivePlayerMoney(playerid,-(gettime()-PlayerEnterTaxi[playerid])/30*15);
GivePlayerMoney(водитель такси,(gettime()-PlayerEnterTaxi[playerid])/30*15);
}

DeimoS
23.08.2016, 21:32
Тебе выше написали, как можно обойтись без таймера, и как правильно сделать.

Прошу заметить, что я не говорил о том, что мой вариант правильный. С моим вариантом не получится сделать счётчик, который будет постоянно обновляться, и т.п.

Saibot
23.08.2016, 22:46
Прошу заметить, что я не говорил о том, что мой вариант правильный. С моим вариантом не получится сделать счётчик, который будет постоянно обновляться, и т.п.
Если он хочет, что бы значение денег прибавлялось/уменьшалось у таксиста/пассажира каждые 30 секунд тогда да, нужен таймер.
Если взять его таймер TaxiTime (Skyline, ты забыл таймера убить после выхода с ТС) то, он так и сделал, но смысл?
Это конечно прихоти скриптера, но я бы лучше сделал так, как ты написал.