Author Topic: Basic Scripting  (Read 1602 times)

I need some help fixing things up.
Code: [Select]
%target = containerRayCast(%client.player.getEyePoint(), vectorAdd(vectorScale(vectorNormalize(%client.player.getEyeVector()), 5), %client.player.getEyePoint()), $typeMasks::playerObjectType).client;For some reason I believe it targets yourself. I am trying to fix part of the city rpg for test purposes.
Code: [Select]
function serverCmdgiveMoney(%client, %money, %name)
{
%money = mFloor(%money);

if(%money > 0)
{
if((CityRPGData.getData(%client.bl_id).valueMoney - %money) >= 0)
{
if(isObject(%client.player))
{
%target = containerRayCast(%client.player.getEyePoint(), vectorAdd(vectorScale(vectorNormalize(%client.player.getEyeVector()), 5), %client.player.getEyePoint()), $typeMasks::playerObjectType).client;

if(isObject(%target))
{
messageClient(%client, '', "\c6You give \c3$" @ %money SPC "\c6to \c3" @ %target.name @ "\c6.");
messageClient(%target, '', "\c3" @ %client.name SPC "\c6has given you \c3$" @ %money @ "\c6.");

CityRPGData.getData(%client.bl_id).valueMoney -= %money;
CityRPGData.getData(%target.bl_id).valueMoney += %money;

%client.SetInfo();
%target.SetInfo();
}
else
messageClient(%client, '', "\c6You must be looking at and be in a reasonable distance of the player in order to give them money.");
}
else
messageClient(%client, '', "\c6Spawn first before you use this command.");
}
else
messageClient(%client, '', "\c6You don't have that much money to give.");
}
else
messageClient(%client, '', "\c6You must enter a valid amount of money to give.");
}

Change:
Code: [Select]
%target = containerRayCast(%client.player.getEyePoint(), vectorAdd(vectorScale(vectorNormalize(%client.player.getEyeVector()), 5), %client.player.getEyePoint()), $typeMasks::playerObjectType).client;To:
Code: [Select]
%target = containerRayCast(%client.player.getEyePoint(), vectorAdd(vectorScale(vectorNormalize(%client.player.getEyeVector()), 5), %client.player.getEyePoint()), $typeMasks::playerObjectType,%client.player).client;The last arguement is the object you wish to ignore.

Oh god, not CityRP
Not because it's CityRP, it's because the code sucks.

This won't fix your problem, but it will make me much happier.

Code: [Select]
function serverCmdgiveMoney(%client, %money, %name)
{
%money = mFloor(%money);

if(%money <= 0)
{
messageClient(%client, '', "\c6You must enter a valid amount of money to give.");
return;
}

if((CityRPGData.getData(%client.bl_id).valueMoney - %money) < 0)
{
messageClient(%client, '', "\c6You don't have that much money to give.");
return;
}

if(!isObject(%client.player))
{
messageClient(%client, '', "\c6Spawn first before you use this command.");
return;
}

%target = containerRayCast(%client.player.getEyePoint(), vectorAdd(vectorScale(vectorNormalize(%client.player.getEyeVector()), 5), %client.player.getEyePoint()), $typeMasks::playerObjectType).client;
if(!isObject(%target))
{
messageClient(%client, '', "\c6You must be looking at and be in a reasonable distance of the player in order to give them money.");
return;
}

messageClient(%client, '', "\c6You give \c3$" @ %money SPC "\c6to \c3" @ %target.name @ "\c6.");
messageClient(%target, '', "\c3" @ %client.name SPC "\c6has given you \c3$" @ %money @ "\c6.");

CityRPGData.getData(%client.bl_id).valueMoney -= %money;
CityRPGData.getData(%target.bl_id).valueMoney += %money;

%client.SetInfo();
%target.SetInfo();
}

Code: [Select]
function CityRPG_AssembleEvents()
{
// Basic Input
registerInputEvent("fxDTSBrick", "onEnterLot", "Self fxDTSBrick" TAB "Player player" TAB "Client gameConnection");
registerInputEvent("fxDTSBrick", "onLeaveLot", "Self fxDTSBrick" TAB "Player player" TAB "Client gameConnection");
registerInputEvent("fxDTSBrick", "onTransferSuccess", "Self fxDTSBrick" TAB "Player Player" TAB "Client GameConnection");
registerInputEvent("fxDTSBrick", "onTransferDecline", "Self fxDTSBrick" TAB "Client GameConnection");
registerInputEvent("fxDTSBrick", "onJobTestPass", "Self fxDTSBrick" TAB "Player Player" TAB "Client GameConnection");
registerInputEvent("fxDTSBrick", "onJobTestFail", "Self fxDTSBrick" TAB "Player Player" TAB "Client GameConnection");

// Basic Output
registerOutputEvent("fxDTSBrick", "requestFunds", "string 80 200" TAB "int 1 9000 1");
registerOutputEvent("GameConnection", "MessageBoxOK", "string 30 50" TAB "string 80 500");

// Pain-in-the-Ass Output
for(%a = 1; $CityRPG::portion[%a] !$= ""; %a++)
{
%sellFood_Portions = %sellFood_Portions SPC $CityRPG::portion[%a] SPC %a;
}
registerOutputEvent("fxDTSBrick", "sellFood", "list" @ %sellFood_Portions TAB "string 45 100" TAB "int 1 50 1");

for(%b = 1; isObject(JobSO.job[%b]); %b++)
{
if(strlen(JobSO.job[%b].name) > 7)
%jobName = getSubStr(JobSO.job[%b].name, 0, 6) @ ".";
else
%jobName = JobSO.job[%b].name;

%doJobTest_List = %doJobTest_List SPC strreplace(%jobName, " ", "") SPC %b;
}
registerOutputEvent("fxDTSBrick", "doJobTest", "list NONE 0" @ %doJobTest_List TAB "list NONE 0" @ %doJobTest_List TAB "bool");

for(%c = 1; isObject($CityRPG::prices::weapon::name[%c]); %c++)
{
%sellItem_List = %sellItem_List SPC strreplace($CityRPG::prices::weapon::name[%c].uiName, " ", "") SPC %c;
}
registerOutputEvent("fxDTSBrick", "sellItem", "list" @ %sellItem_List TAB "int 0 500 1");

for(%d = 0; %d < ClientGroup.getCount(); %d++)
{
%subClient = ClientGroup.getObject(%d);
serverCmdRequestEventTables(%subClient);
messageClient(%subClient, '', "\c6Your Event Tables have been updated. If you do not know what that means, ignore this message.");
}
}

Code: [Select]
function fxDTSBrick::sellItem(%brick, %item, %markup, %client)
{
if(isObject(%client.player) && !%client.player.serviceOrigin  && isObject(%brick))
{
%name = $CityRPG::prices::weapon::name[%item].uiName;

if(CitySO.minerals >= $CityRPG::prices::weapon::mineral[%item])
{
%client.player.serviceType = "item";
%client.player.serviceItem = %item;
%client.player.serviceFee = $CityRPG::prices::weapon::price[%item] + %markup;
%client.player.serviceMarkup = %markup;
%client.player.serviceOrigin = %brick;

messageClient(%client,'',"\c6A service is offering to sell you one \c3" @ %name SPC "\c6for \c3$" @ %client.player.serviceFee SPC "\c6.");
messageClient(%client,'',"\c6Accept with \c3/yes\c6, decline with \c3/no\c6.");
}
else
messageClient(%client, '', '\c6A service is trying to offer you %1 \c3%2\c6, but the city needs \c3%3\c6 more minerals to produce it!', CityRPG_DetectVowel(%name), %name, ($CityRPG::prices::weapon::mineral[%item] - CitySO.minerals));
}
else if(%client.player.serviceOrigin && %client.player.serviceOrigin != %brick)
messageClient(%client, '', "\c6You already have a charge request from another service! Type \c3/no\c6 to reject it.");
}
I think the first snippet is ok, but the second one doesn't register the items in the drop down.

Plus this is where it gets the data.
Code: [Select]
$CityRPG::prices::weapon::name[$CityRPG::guns++] = "gunItem";
$CityRPG::prices::weapon::price[$CityRPG::guns] = 60;
$CityRPG::prices::weapon::mineral[$CityRPG::guns] = 30;

I know I'm bumping a month-old topic, but I am also trying to fix a City RP and I need the answer to this question.