#define MAX_MASS 300
#define MAX_SLOTS 10
#define DRUG_ID 100
#define MATS_ID 101
#define MAX_ITEM_NAME_LENGTH 50
native IsValidVehicle(vehicleid);
//oder per #define
enum {
DIALOG_TRUNK,
DIALOG_TRUNK_OUTPUT_MATS,
DIALOG_TRUNK_OUTPUT_DRUGS,
DIALOG_TRUNK_INPUT_MATS,
DIALOG_TRUNK_INPUT_DRUGS,
DIALOG_TRUNK_INPUT
}
//KofferraumSys
enum KofferraumEnum
{
mass,
name[MAX_ITEM_NAME_LENGTH],
item_id //Waffenids, 100 für Drogen(allgemein gehalten), 101 für Mats(allgemein gehalten)
}
new Kofferraum[MAX_VEHICLES][MAX_SLOTS][KofferraumEnum];
enum VInf
{
max_mass,
bool:used_kofferraum,
actual_mass
}
new VehInfo[MAX_VEHICLES][VInf];
//der Befehl
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/kofferraum", cmdtext, true) == 0)
{
new veh = FindClosestTrunk(playerid);
if(veh!=-1)
{
if(VehInfo[veh][used_kofferraum])return SendClientMessage(playerid,-1,"Der Kofferraum wird gerade genutzt...");
SetPVarInt(playerid,"VID",veh);
VehInfo[veh][used_kofferraum]=true;
ShowTrunk(playerid,veh);
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_ON, objective);
}
else
{
SendClientMessage(playerid,-1,"Du befindest dich nicht an einem Kofferraum.");
}
return 1;
}
return 0;
}
//die Functions
/*Position hinter kofferraum kopiert von https://forum.sa-mp.com/showthread.php?t=453546 */
stock GetXYBehindVehicle(vehicleid, &Float:x2, &Float:y2, Float:distance)
{
new Float:a;
GetVehiclePos(vehicleid, x2, y2, a);
GetVehicleZAngle(vehicleid, a);
x2 += (distance * floatsin(-a+180, degrees));
y2 += (distance * floatcos(-a+180, degrees));
return 1;
}
stock GetTrunkPos(vehicleid, &Float: x3, &Float:y3, &Float:z3)
{
new Float: x, Float: y;
new Float: sizeX, Float: sizeY, Float:sizeZ[2];
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ[0]);
GetXYBehindVehicle(vehicleid, x, y, sizeY/2);
x3 = x;
y3 = y;
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_REAR_BUMPER_Z , sizeX, sizeY, sizeZ[1]);
z3 = (sizeZ[1] + sizeZ[0]/2);
return 1;
}
stock ShowTrunk(playerid,veh)
{
CheckSlots(veh);
new string[250];
for(new i=0;i<MAX_SLOTS;i++)
{
if(Kofferraum[veh][i][item_id]==0)continue;
format(string,sizeof(string),"%s\n%d\t%s\t%d",string,Kofferraum[veh][i][item_id],Kofferraum[veh][i][name],Kofferraum[veh][i][mass]);
}
format(string,sizeof(string),"Item id\tName\tAnzahl\n%s\n0\tItem einlagern\t0",string);
new header[50];
format(header,sizeof(header),"Kofferraum (%d/%d)",VehInfo[veh][actual_mass],VehInfo[veh][max_mass]);
ShowPlayerDialog(playerid,DIALOG_TRUNK,DIALOG_STYLE_TABLIST_HEADERS,header,string,"Auswählen","Abbrechen");
return 1;
}
stock CloseTrunk(playerid,veh)
{
new engine, lights, alarm, doors, bonnet, boot, objective;
GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective);
SetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_OFF, objective);
VehInfo[veh][used_kofferraum]=false;
SendClientMessage(playerid,-1,"Du hast den Kofferraum geschlossen.");
DeletePVar(playerid,"VID");
return 1;
}
stock StoreItem(playerid,vehid,id,menge,itemName[])
{
new freeslot = GetFreeSlot(vehid);
if(menge < 1)return SendClientMessage(playerid,-1,"Du musst schon etwas im Fahrzeug ablegen.");
if(freeslot == -1)return SendClientMessage(playerid,-1,"Keinen Platz mehr im Fahrzeug.");
if(VehInfo[vehid][max_mass]<VehInfo[vehid][actual_mass]+menge)return SendClientMessage(playerid,-1,"Im Fahrzeug passt nix mehr rein.");
new string[125];
format(string,sizeof(string),"Du legst %d %s in den Kofferraum.",menge,itemName);
if(id<=46)
{
GivePlayerWeapon(playerid,id,-menge);
format(string,sizeof(string),"Du legst %s mit %d Munition in den Kofferraum.",itemName,menge);
}
VehInfo[vehid][actual_mass]+=menge;
Kofferraum[vehid][freeslot][item_id]=id;
Kofferraum[vehid][freeslot][mass]=menge;
strmid(Kofferraum[vehid][freeslot][name],itemName,0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH);
SendClientMessage(playerid,-1,string);
return 1;
}
stock TakeItem(playerid,veh,menge)
{
new listid = GetPVarInt(playerid,"ListId");
DeletePVar(playerid,"ListId");
if(Kofferraum[veh][listid][mass]<menge || menge < 0)return SendClientMessage(playerid,-1,"So viel ist nicht im Wagen.");
new string[125];
format(string,sizeof(string),"Du hast %d von %s entnommen.",menge,Kofferraum[veh][listid][name]);
SendClientMessage(playerid,-1,string);
GivePlayerItem(playerid,Kofferraum[veh][listid][item_id],Kofferraum[veh][listid][mass]);
VehInfo[veh][actual_mass]-=menge;
Kofferraum[veh][listid][mass]-=menge;
if(Kofferraum[veh][listid][mass]==0)
{
Kofferraum[veh][listid][item_id]=0;
}
return 1;
}
stock GivePlayerItem(playerid,id,amount)
{
if(id==DRUG_ID)//Drogen
{
//pInfo[playerid][drugs]+=amount; Bsp.
}
else if(id==MATS_ID)//Mats
{
//pInfo[playerid][mats]+=amount; Bsp.
}
else//Waffen
{
GivePlayerWeapon(playerid,id,amount);
}
}
stock CheckSlots(veh)
{
for(new i=0;i<MAX_SLOTS-1;i++)
{
if(Kofferraum[veh][i][item_id]==0)
{
Kofferraum[veh][i][item_id]=Kofferraum[veh][i+1][item_id];
Kofferraum[veh][i][mass]=Kofferraum[veh][i+1][mass];
strmid(Kofferraum[veh][i][name],Kofferraum[veh][i+1][name],0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH);
Kofferraum[veh][i+1][item_id]=0;
Kofferraum[veh][i+1][mass]=0;
}
}
return 1;
}
stock GetFreeSlot(veh)
{
for(new i=0;i<MAX_SLOTS;i++)
{
if(Kofferraum[veh][i][item_id]==0)return i;
}
return -1;
}
stock ClearKofferraum(veh)
{
VehInfo[veh][actual_mass]=0;
VehInfo[veh][max_mass]=MAX_MASS;
for(new i=0;i<MAX_SLOTS;i++)
{
Kofferraum[veh][i][item_id]=0;
Kofferraum[veh][i][mass]=0;
strmid(Kofferraum[veh][i][name],"",0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH);
}
return 1;
}
stock FindClosestTrunk(playerid)
{
new Float:closestDistance=3.0;
new veh=-1;
for(new i=0;i<MAX_VEHICLES;i++)
{
if(!IsValidVehicle(i))continue;
new Float:x, Float:y, Float:z;
GetTrunkPos(i, x, y, z);
new Float:distance = GetPlayerDistanceFromPoint(playerid, x,y,z);
if(closestDistance>distance)
{
closestDistance=distance;
veh = i;
}
}
return veh;
}
// Dialoge
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_TRUNK:
{
if(response)
{
new id = strval(inputtext);
if (!sscanf(inputtext, "d", id))
{
SetPVarInt(playerid,"ListId",listitem);
if(id == 0)
{
ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT,DIALOG_STYLE_LIST,"Items","Drogen\nMats\nWaffe","Auswählen","Abbrechen");
}
else if (id == DRUG_ID)
{
ShowPlayerDialog(playerid,DIALOG_TRUNK_OUTPUT_DRUGS,DIALOG_STYLE_INPUT,"Drogen","Wie viele Drogen willst du entnehmen?","Auswählen","Zurück");
}
else if (id == MATS_ID)
{
ShowPlayerDialog(playerid,DIALOG_TRUNK_OUTPUT_MATS,DIALOG_STYLE_INPUT,"Materialien","Wie viele Materialien willst du entnehmen?","Auswählen","Zurück");
}
else
{
new veh = GetPVarInt(playerid,"VID");
new string[125];
format(string,sizeof(string),"Du hast %s entnommen",Kofferraum[veh][listitem][name]);
SendClientMessage(playerid,-1,string);
GivePlayerItem(playerid,Kofferraum[veh][listitem][item_id],Kofferraum[veh][listitem][mass]);
VehInfo[veh][actual_mass]-=Kofferraum[veh][listitem][mass];
Kofferraum[veh][listitem][item_id]=0;
Kofferraum[veh][listitem][mass]=0;
ShowTrunk(playerid,veh);
return 1;
}
}
}
else
{
new veh = GetPVarInt(playerid,"VID");
CloseTrunk(playerid,veh);
return 1;
}
}
case DIALOG_TRUNK_OUTPUT_DRUGS:
{
new veh = GetPVarInt(playerid,"VID");
if(response)
{
TakeItem(playerid,veh,strval(inputtext));
ShowTrunk(playerid,veh);
}
else
{
ShowTrunk(playerid,veh);
}
}
case DIALOG_TRUNK_OUTPUT_MATS:
{
new veh = GetPVarInt(playerid,"VID");
if(response)
{
TakeItem(playerid,veh,strval(inputtext));
ShowTrunk(playerid,veh);
}
else
{
ShowTrunk(playerid,veh);
}
}
case DIALOG_TRUNK_INPUT:
{
if(response)
{
if(listitem==0)
{
ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT_DRUGS,DIALOG_STYLE_INPUT,"Drogen","Wie viele Drogen willst du einpacken?","Auswählen","Zurück");
}
if(listitem==1)
{
ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT_MATS,DIALOG_STYLE_INPUT,"Materialien","Wie viele Materialien willst du einpacken?","Auswählen","Zurück");
}
if(listitem==2)
{
new vehicle = GetPVarInt(playerid,"VID");
new weapons[13][2];
for (new i = 0; i <= 12; i++)
{
GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
if(GetPlayerWeapon(playerid)==weapons[i][0] && GetPlayerWeapon(playerid)!=0)
{
new weapname[32];
GetWeaponName(weapons[i][0],weapname,sizeof(weapname));
StoreItem(playerid,vehicle,weapons[i][0],weapons[i][1],weapname);
ShowTrunk(playerid,vehicle);
return 1;
}
}
ShowTrunk(playerid,vehicle);
return SendClientMessage(playerid,-1,"Du hast keine Waffe ausgerüstet.");
}
}
else
{
new vehicle2 = GetPVarInt(playerid,"VID");
CloseTrunk(playerid,vehicle2);
return 1;
}
}
case DIALOG_TRUNK_INPUT_DRUGS:
{
new veh = GetPVarInt(playerid,"VID");
if(response)
{
StoreItem(playerid,veh,DRUG_ID,strval(inputtext),"Marihuana");
ShowTrunk(playerid,veh);
return 1;
}
else
{
ShowTrunk(playerid,veh);
}
}
case DIALOG_TRUNK_INPUT_MATS:
{
new vehid = GetPVarInt(playerid,"VID");
if(response)
{
StoreItem(playerid,vehid,MATS_ID,strval(inputtext),"Material");
ShowTrunk(playerid,vehid);
return 1;
}
else
{
ShowTrunk(playerid,vehid);
}
}
}
return 1;
}
Alles anzeigen