Просмотр полной версии : [Вопрос] Снимаем деньги с пассажира.
Здравствуйте, подскажите, как для такси сделать, чтобы когда садились пассажиры, каждые 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)//так наверное надо было
Я и не сказал чтобы каждые каждые 30 сек закидывали деньгами. Нужно чтобы прибавлялись они, ну например по 15$ за каждые 30 сек, вот сколько проедет, столько и получит в конце. Осуществить просто не пойму как с проверкой на пассажира и деньгами.
Я и не сказал чтобы каждые каждые 30 сек закидывали деньгами. Нужно чтобы прибавлялись они, ну например по 15$ за каждые 30 сек, вот сколько проедет, столько и получит в конце. Осуществить просто не пойму как с проверкой на пассажира и деньгами.
Когда игрок садиться в авто, проверяй, сел ли он в такси и сел ли он пассажиром. Если всё сошлось, записывай gettime в массив и когда игрок авто покидает, текущее значение gettime отнимай от записанного. Это и будет время, которое игрок просидел в авто. Далее дели его на 30 (если ты хочешь, чтоб каждые 30 секунд снимало деньги) и умножай на сумму, которую ты хочешь отнимать каждые 30 секунд.
Получится как-то так
(gettime()-array)/30*15
Это и выйдет сумма, которую нужно отнять у пассажира и отдать водителю
А я сделал так.
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;
}
}
Так не верно?
Тебе выше написали, как можно обойтись без таймера, и как правильно сделать.
Так не верно?
А, что мешает проверить?
vovandolg
23.08.2016, 03:32
Зачем узнавать никнейм если ты его не используешь в коде?
Да я вообще запутался, не могу сообразить как и что. Да DeimoS дал путь к решению, но я не могу додумать и сообразить как это будет все в коде(
- - - Добавлено - - -
Так же записать данные в массив?
SetPVarInt(playerid,"Taxi",gettime());
И так получается нужно вывести сумму?
SetPVarInt(playerid,"Taxi",(gettime())/30*moneys );
Да я вообще запутался, не могу сообразить как и что. Да 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);
}
Тебе выше написали, как можно обойтись без таймера, и как правильно сделать.
Прошу заметить, что я не говорил о том, что мой вариант правильный. С моим вариантом не получится сделать счётчик, который будет постоянно обновляться, и т.п.
Прошу заметить, что я не говорил о том, что мой вариант правильный. С моим вариантом не получится сделать счётчик, который будет постоянно обновляться, и т.п.
Если он хочет, что бы значение денег прибавлялось/уменьшалось у таксиста/пассажира каждые 30 секунд тогда да, нужен таймер.
Если взять его таймер TaxiTime (Skyline, ты забыл таймера убить после выхода с ТС) то, он так и сделал, но смысл?
Это конечно прихоти скриптера, но я бы лучше сделал так, как ты написал.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot