Skip to content

Commit

Permalink
add support for 0.3.7
Browse files Browse the repository at this point in the history
  • Loading branch information
123marvin123 committed May 2, 2015
1 parent f9e4459 commit 00cb5c7
Show file tree
Hide file tree
Showing 12 changed files with 329 additions and 1 deletion.
59 changes: 59 additions & 0 deletions src/main/java/net/gtaun/shoebill/SampEventDispatcher.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import net.gtaun.shoebill.amx.AmxHook;
import net.gtaun.shoebill.constant.*;
import net.gtaun.shoebill.data.*;
import net.gtaun.shoebill.event.actor.ActorStreamInEvent;
import net.gtaun.shoebill.event.actor.ActorStreamOutEvent;
import net.gtaun.shoebill.event.checkpoint.CheckpointEnterEvent;
import net.gtaun.shoebill.event.checkpoint.CheckpointLeaveEvent;
import net.gtaun.shoebill.event.checkpoint.RaceCheckpointEnterEvent;
Expand Down Expand Up @@ -2038,6 +2040,63 @@ public int[] onHookCall(String name, Object... objects) {
return new int[]{event.getReturnValue(), event.isDisallow()};
}

@Override
public int onActorStreamIn(int actor, int playerid) {
try {
Actor actorObject = Actor.get(actor);
Player player = Player.get(playerid);
ActorStreamInEvent event = new ActorStreamInEvent(actorObject, player);
rootEventManager.dispatchEvent(event, actorObject, player);
} catch (Throwable e) {
e.printStackTrace();
return 0;
}
return 1;
}

@Override
public int onActorStreamOut(int actor, int playerid) {
try {
Actor actorObject = Actor.get(actor);
Player player = Player.get(playerid);
ActorStreamOutEvent event = new ActorStreamOutEvent(actorObject, player);
rootEventManager.dispatchEvent(event, actorObject, player);
} catch (Throwable e) {
e.printStackTrace();
return 0;
}
return 1;
}

@Override
public int onPlayerGiveDamageActor(int playerid, int actor, int amount, int weapon, int bodypart) {
try {
Player player = Player.get(playerid);
Actor actorObject = Actor.get(actor);
WeaponModel model = WeaponModel.get(weapon);
PlayerDamageActorEvent event = new PlayerDamageActorEvent(player, actorObject, amount, model, bodypart);
rootEventManager.dispatchEvent(event, player, actorObject, model);
} catch (Throwable e) {
e.printStackTrace();
return 0;
}
return 1;
}

@Override
public int onVehicleSirenStateChange(int playerid, int vehicleid, int newstate) {
try {
Player player = Player.get(playerid);
Vehicle vehicle = Vehicle.get(vehicleid);
VehicleSirenStateChangeEvent event = new VehicleSirenStateChangeEvent(vehicle, player, newstate > 0);
rootEventManager.dispatchEvent(event, vehicle, player, newstate > 0);
} catch (Throwable e) {
e.printStackTrace();
return 0;
}
return 1;
}

public void executeWithoutEvent(Runnable func) {
this.active = false;
func.run();
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/net/gtaun/shoebill/SampObjectManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -376,4 +376,15 @@ public Timer createTimer(int interval, int count, TimerCallback callback) {
throw new CreationFailedException(e);
}
}

@Override
public Actor createActor(int modelid, Vector3D position, float angle) throws CreationFailedException {
try {
ActorImpl actor = new ActorImpl(modelid, position, angle);
super.setActor(actor.getId(), actor);
return actor;
} catch (Throwable e) {
throw new CreationFailedException(e);
}
}
}
32 changes: 32 additions & 0 deletions src/main/java/net/gtaun/shoebill/SampObjectStoreImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public class SampObjectStoreImpl implements SampObjectStore {
public static final int MAX_PLAYER_LABELS = 1024;
public static final int MAX_PICKUPS = 4096;
public static final int MAX_CLASSES = 300;
public static final int MAX_ACTORS = 1000;
protected final EventManager eventManagerNode;
private Server server;
private World world;
Expand All @@ -65,6 +66,7 @@ public class SampObjectStoreImpl implements SampObjectStore {
private PlayerTextdraw[][] playerTextdrawsArray = new PlayerTextdraw[MAX_PLAYERS][];
private Zone[] zones = new Zone[MAX_ZONES];
private Menu[] menus = new Menu[MAX_MENUS];
private Actor[] actors = new Actor[MAX_ACTORS];
private SpawnInfo[] playerClasses = new SpawnInfo[MAX_CLASSES];
private Collection<Reference<TimerImpl>> timers = new ConcurrentLinkedQueue<>();
private Map<Integer, Reference<DialogId>> dialogs = new ConcurrentHashMap<>();
Expand Down Expand Up @@ -400,6 +402,32 @@ public Collection<SpawnInfo> getPlayerClasses() {
return items;
}

@Override
public Collection<Actor> getActors() {
return new ArrayList<>(Arrays.asList(actors));
}

@Override
public Actor getActor(int id) {
if (id < 0 || id > MAX_ACTORS) return null;
return actors[id];
}

@Override
public int getVehiclePoolSize() {
return SampNativeFunction.getVehiclePoolSize();
}

@Override
public int getPlayerPoolSize() {
return SampNativeFunction.getPlayerPoolSize();
}

@Override
public int getActorPoolSize() {
return SampNativeFunction.getActorPoolSize();
}

public Collection<Timer> getTimers() {
Collection<Timer> items = new ArrayList<>();
Collection<Reference<TimerImpl>> unusedItems = new ArrayList<>();
Expand Down Expand Up @@ -489,6 +517,10 @@ public void setMenu(int id, Menu menu) {

public void setPlayerClass(int id, SpawnInfo playerClass) { playerClasses[id] = playerClass; }

public void setActor(int id, Actor actor) {
actors[id] = actor;
}

public void putTimer(TimerImpl timer) {
clearUnusedReferences(timers);
timers.add(new WeakReference<>(timer));
Expand Down
92 changes: 92 additions & 0 deletions src/main/java/net/gtaun/shoebill/object/impl/ActorImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package net.gtaun.shoebill.object.impl;

import net.gtaun.shoebill.SampNativeFunction;
import net.gtaun.shoebill.data.AngledLocation;
import net.gtaun.shoebill.data.Vector3D;
import net.gtaun.shoebill.object.Actor;
import net.gtaun.shoebill.object.Player;

/**
* Created by marvin on 01.05.15 in project shoebill-runtime.
* Copyright (c) 2015 Marvin Haschker. All rights reserved.
*/
public class ActorImpl implements Actor {

private int id, modelid;


public ActorImpl(int modelid, Vector3D pos, float angle) {
this(modelid, pos, angle, true, -1);
}

public ActorImpl(int modelid, Vector3D pos, float angle, boolean doExec, int id) {
this.modelid = modelid;
if (doExec) this.id = SampNativeFunction.createActor(modelid, pos.x, pos.y, pos.z, angle);
else this.id = id;
}

@Override
public int getId() {
return this.id;
}

@Override
public int getModel() {
return modelid;
}

@Override
public AngledLocation getLocation() {

AngledLocation pos = new AngledLocation();
SampNativeFunction.getActorPos(id, pos);

pos.angle = SampNativeFunction.getActorFacingAngle(id);
pos.worldId = SampNativeFunction.getActorVirtualWorld(id);

return pos;
}

@Override
public float getHealth() {
return SampNativeFunction.getActorHealth(id);
}

@Override
public void setInvulnerable(boolean invulnerable) {
SampNativeFunction.setActorInvulnerable(id, invulnerable);
}

@Override
public boolean isInvulnerable() {
return SampNativeFunction.isActorInvulnerable(id) > 0;
}

@Override
public void applyAnimation(String animLib, String animName, float animSpeed, boolean loop, boolean lockX, boolean lockY, boolean freeze, int time) {
SampNativeFunction.applyActorAnimation(id, animLib, animName, animSpeed, loop ? 1 : 0, lockX ? 1 : 0, lockY ? 1 : 0, freeze ? 1 : 0, time);
}

@Override
public void clearAnimation() {
SampNativeFunction.clearActorAnimations(id);
}

@Override
public boolean isActorStreamedIn(Player player) {
return SampNativeFunction.isActorStreamedIn(id, player.getId()) > 0;
}

@Override
public void destroy() {
if (isDestroyed()) return;

SampNativeFunction.destroyActor(id);
this.id = -1;
}

@Override
public boolean isDestroyed() {
return id < 0;
}
}
45 changes: 45 additions & 0 deletions src/main/java/net/gtaun/shoebill/object/impl/PlayerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -1543,4 +1543,49 @@ public List<String> getVarNames() {
public PlayerVarType getVarType(String name) {
return PlayerVarType.get(SampNativeFunction.getPVarType(id, name));
}

@Override
public void disableRemoteVehicleCollisions(boolean b) {
SampNativeFunction.disableRemoteVehicleCollisions(id, b ? 1 : 0);
}

@Override
public void enablePlayerCameraTarget(boolean b) {
SampNativeFunction.enablePlayerCameraTarget(id, b ? 1 : 0);
}

@Override
public Actor getCameraTargetActor() {
int actorId = SampNativeFunction.getPlayerCameraTargetActor(id);
if (actorId != Actor.INVALID_ACTOR) return Actor.get(actorId);
return null;
}

@Override
public SampObject getCameraTargetObject() {
int objectId = SampNativeFunction.getPlayerCameraTargetObject(id);
if (objectId != SampObject.INVALID_ID) return SampObject.get(objectId);
return null;
}

@Override
public Player getCameraTargetPlayer() {
int playerId = SampNativeFunction.getPlayerCameraTargetPlayer(id);
if (playerId != Player.INVALID_ID) return Player.get(playerId);
return null;
}

@Override
public Vehicle getCameraTargetVehicle() {
int vehicleId = SampNativeFunction.getPlayerCameraTargetVehicle(id);
if (vehicleId != Vehicle.INVALID_ID) return Vehicle.get(vehicleId);
return null;
}

@Override
public Actor getTargetActor() {
int actorId = SampNativeFunction.getPlayerTargetActor(id);
if (actorId != Actor.INVALID_ACTOR) return Actor.get(actorId);
return null;
}
}
10 changes: 10 additions & 0 deletions src/main/java/net/gtaun/shoebill/object/impl/PlayerObjectImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -315,4 +315,14 @@ public void setMaterialText(String text) {

SampNativeFunction.setPlayerObjectMaterialText(player.getId(), id, text, 0, ObjectMaterialSize.SIZE_256x128.getValue(), "Arial", 24, 1, 0xFFFFFFFF, 0, 0);
}

@Override
public void setNoCameraCol() {
SampNativeFunction.setObjectNoCameraCol(id);
}

@Override
public void setPlayerObjectNoCameraCol() {
SampNativeFunction.setPlayerObjectNoCameraCol(player.getId(), id);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -352,4 +352,9 @@ public void setMaterialText(String text, int materialIndex, ObjectMaterialSize m
public void setMaterialText(String text) {
setMaterialText(text, 0, ObjectMaterialSize.SIZE_256x128, "Arial", 24, true, Color.WHITE, Color.TRANSPARENT, ObjectMaterialTextAlign.LEFT);
}

@Override
public void setNoCameraCol() {
SampNativeFunction.setObjectNoCameraCol(id);
}
}
29 changes: 29 additions & 0 deletions src/main/java/net/gtaun/shoebill/object/impl/VehicleImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,35 @@ public void repair() {
SampNativeFunction.repairVehicle(id);
}

@Override
public VehicleState getDoors() {
VehicleState params = new VehicleState();
SampNativeFunction.getVehicleParamsCarDoors(id, params);
return params;
}

@Override
public VehicleState getWindows() {
VehicleState params = new VehicleState();
SampNativeFunction.getVehicleParamsCarWindows(id, params);
return params;
}

@Override
public int getSirenState() {
return SampNativeFunction.getVehicleParamsSirenState(id);
}

@Override
public void setDoors(VehicleState vehicleState) {
SampNativeFunction.setVehicleParamsCarDoors(id, vehicleState.driver, vehicleState.passenger, vehicleState.backLeft, vehicleState.backRight);
}

@Override
public void setWindows(VehicleState vehicleState) {
SampNativeFunction.setVehicleParamsCarWindows(id, vehicleState.driver, vehicleState.passenger, vehicleState.backLeft, vehicleState.backRight);
}

@Override
public void setAngularVelocity(Velocity velocity) {
if (isDestroyed()) return;
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/net/gtaun/shoebill/object/impl/WorldImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,9 @@ public void enableStuntBonusForAll(boolean enabled) {
public void manualEngineAndLights() {
SampNativeFunction.manualVehicleEngineAndLights();
}

@Override
public void setObjectsDefaultCameraCol(boolean disable) {
SampNativeFunction.setObjectsDefaultCameraCol(disable ? 1 : 0);
}
}
16 changes: 16 additions & 0 deletions src/main/java/net/gtaun/shoebill/samp/SampCallbackHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -519,4 +519,20 @@ default int onAmxChangeVehicleColor(int vehicleid, int color1, int color2) {
default int[] onHookCall(String name, Object... objects) {
return new int[]{0, 0};
}

default int onActorStreamIn(int actor, int playerid) {
return 1;
}

default int onActorStreamOut(int actor, int playerid) {
return 1;
}

default int onPlayerGiveDamageActor(int playerid, int actor, int amount, int weapon, int bodypart) {
return 1;
}

default int onVehicleSirenStateChange(int playerid, int vehicleid, int newstate) {
return 1;
}
}
Loading

0 comments on commit 00cb5c7

Please sign in to comment.